new Function
एक समारोह है कि पुन: उपयोग किया जा सकता है बनाता है:
var evaluate = function(string) {
return eval(string);
}
var func = function(string) {
return (new Function('return (' + string + ')')());
}
ये आप बहुत अलग परिणाम प्राप्त होंगे। eval
बस दिए गए स्ट्रिंग को निष्पादित करता है और अंतिम विवरण का परिणाम देता है। आपका प्रश्न गुमराह है क्योंकि आपने एक रैपर फ़ंक्शन बनाने का प्रयास किया है जो एक eval अनुकरण करने के लिए फ़ंक्शन का उपयोग करता है।
क्या यह सच है कि वे पर्दे के पीछे कुछ कोड साझा करते हैं? हाँ, बहुत संभावना है। बिल्कुल वही कोड? नहीं, निश्चित रूप से।
मज़े के लिए, यहां एक कार्य बनाने के लिए eval का उपयोग करके मेरा अपना अपूर्ण कार्यान्वयन है। उम्मीद है कि यह अंतर में कुछ प्रकाश डालता है!
function makeFunction() {
var params = [];
for (var i = 0; i < arguments.length - 1; i++) {
params.push(arguments[i]);
}
var code = arguments[arguments.length - 1];
// Creates the anonymous function to be returned
// The following line doesn't work in IE
// return eval('(function (' + params.join(',')+ '){' + code + '})');
// This does though
return eval('[function (' + params.join(',')+ '){' + code + '}][0]');
}
इस और नए समारोह के बीच सबसे बड़ा अंतर यह है कि फ़ंक्शन को स्पष्ट रूप से स्कॉप्ड नहीं किया जाता है। तो इसे बंद करने के चर और मेरी इच्छा तक पहुंच नहीं होगी।
स्रोत
2011-01-05 00:53:01
वास्तव में इसका उपयोग jQuery 1.7.2 लाइन 573 में किया जाता है। हालांकि "कुछ सुरक्षा जांच" – PicoCreator
इस चर्चा में 'नया' क्यों माना जाता है? 'फंक्शन' स्पष्ट रूप से 'फ़ंक्शन ऑब्जेक्ट' को तुरंत चालू करता है। 'नया' को छोड़कर कोड बिल्कुल नहीं बदलेगा। यहां एक jsfiddle दिखा रहा है कि: http://jsfiddle.net/PcfG8/ –