2010-08-10 14 views
5

जावास्क्रिप्ट में, eval के परिणामों को कैश करना संभव है?कैश eval() परिणाम

उदाहरण के लिए यह करता है, तो मैं कर सकता बहुत अच्छा होगा:

var str="some code..."; 
var code = eval(str); 
//later on... 
code.reExecute(); 

उत्तर

6

आप str फ़ंक्शन का बॉडी बना सकते हैं और के बजाय New Function का उपयोग कर सकते हैं।

var fn = new Function([param1, param2,...], str); 

और fn(p1, p2,...)

या eval का उपयोग को फोन करके यह पुन: उपयोग, और str बनाने के लिए किया कुछ की तरह

var fn = eval("(function(a){alert(a);})") 
+1

यह। यद्यपि यह 'eval' के लिए थोड़ा अलग है कि स्ट्रिंग में कोड युक्त कोड के स्थानीय दायरे का वारिस नहीं करता है। – bobince

+0

@bobince, मैं बस इसे संपादित कर रहा था – Mic

+0

ऐसा लगता है कि दोनों उत्तरों का उपयोग करने के लिए उसी तरह से उपयोग किया जाता है, बढ़िया! क्या कोई प्रदर्शन बेंचमार्क है जो सटीक विधि (1- स्ट्रिंग के साथ नया फ़ंक्शन बनाना, 2- फ़ंक्शन को निकालना) बेहतर है? – DuduAlul

2

'eval' कॉल का परिणाम जावास्क्रिप्ट मूल्यांकन करना है। जावास्क्रिप्ट (ब्राउज़रों में) किसी भी तरह का 'संकलन' फ़ंक्शन प्रदान नहीं करता है।

निकटतम आप (eval का उपयोग) मिल सकता है है:

var cached_func = eval('function() {' + str + '}'); 

तो फिर तुम cached_func बाद में फोन कर सकते हैं।

+1

ब्राउज़र में नहीं के बारे में कैसे? – DuduAlul

+0

Google के वी 8 जावास्क्रिप्ट इंजन के साथ 'स्क्रिप्ट :: संकलन' का उपयोग करने के उदाहरण के लिए [यहां] (http://code.google.com/apis/v8/get_started.html) देखें। – sje397

1

एक समारोह है कि अतुल्यकालिक पुनः प्राप्ति के लिए एक कैश वस्तु में मूल्यांकन करता है और परिणाम संग्रहीत करता है सुनिश्चित करें :

var Cache = { } ; 

function evalString(string) { 

    var evaluated = eval(string) ; 
     Cache.evalResult = evaluated ; 

} 

तब आप कॉल कर सकते हैं इस तरह है कि कोड:

Cache.evalResult(/* arguments */) ; 

एक तरफ ध्यान दें पर, "eval बुराई है" के रूप में http://www.jslint.com, आपको बता क्योंकि यह अपनी सामग्री के बाहरी हेरफेर के लिए दरवाजे खोल सकता है जाएगा। आपको eval की आवश्यकता क्यों है जो इसे पहले स्थान पर कार्य करता है?

+0

मेरे पास एक स्ट्रिंग है जिसका मूल्यांकन किया जाना है ... – DuduAlul

संबंधित मुद्दे