जावास्क्रिप्ट में, eval
के परिणामों को कैश करना संभव है?कैश eval() परिणाम
उदाहरण के लिए यह करता है, तो मैं कर सकता बहुत अच्छा होगा:
var str="some code...";
var code = eval(str);
//later on...
code.reExecute();
जावास्क्रिप्ट में, eval
के परिणामों को कैश करना संभव है?कैश eval() परिणाम
उदाहरण के लिए यह करता है, तो मैं कर सकता बहुत अच्छा होगा:
var str="some code...";
var code = eval(str);
//later on...
code.reExecute();
आप str
फ़ंक्शन का बॉडी बना सकते हैं और के बजाय New Function
का उपयोग कर सकते हैं।
var fn = new Function([param1, param2,...], str);
और fn(p1, p2,...)
या eval का उपयोग को फोन करके यह पुन: उपयोग, और str
बनाने के लिए किया कुछ की तरह
var fn = eval("(function(a){alert(a);})")
'eval' कॉल का परिणाम जावास्क्रिप्ट मूल्यांकन करना है। जावास्क्रिप्ट (ब्राउज़रों में) किसी भी तरह का 'संकलन' फ़ंक्शन प्रदान नहीं करता है।
निकटतम आप (eval का उपयोग) मिल सकता है है:
var cached_func = eval('function() {' + str + '}');
तो फिर तुम cached_func
बाद में फोन कर सकते हैं।
एक समारोह है कि अतुल्यकालिक पुनः प्राप्ति के लिए एक कैश वस्तु में मूल्यांकन करता है और परिणाम संग्रहीत करता है सुनिश्चित करें :
var Cache = { } ;
function evalString(string) {
var evaluated = eval(string) ;
Cache.evalResult = evaluated ;
}
तब आप कॉल कर सकते हैं इस तरह है कि कोड:
Cache.evalResult(/* arguments */) ;
एक तरफ ध्यान दें पर, "eval बुराई है" के रूप में http://www.jslint.com, आपको बता क्योंकि यह अपनी सामग्री के बाहरी हेरफेर के लिए दरवाजे खोल सकता है जाएगा। आपको eval
की आवश्यकता क्यों है जो इसे पहले स्थान पर कार्य करता है?
मेरे पास एक स्ट्रिंग है जिसका मूल्यांकन किया जाना है ... – DuduAlul
यह। यद्यपि यह 'eval' के लिए थोड़ा अलग है कि स्ट्रिंग में कोड युक्त कोड के स्थानीय दायरे का वारिस नहीं करता है। – bobince
@bobince, मैं बस इसे संपादित कर रहा था – Mic
ऐसा लगता है कि दोनों उत्तरों का उपयोग करने के लिए उसी तरह से उपयोग किया जाता है, बढ़िया! क्या कोई प्रदर्शन बेंचमार्क है जो सटीक विधि (1- स्ट्रिंग के साथ नया फ़ंक्शन बनाना, 2- फ़ंक्शन को निकालना) बेहतर है? – DuduAlul