मुख्य अंतर पहला है (एक फ़ंक्शन घोषणा) को उस दायरे के शीर्ष पर फिसल गया है जिसमें दूसरा घोषित किया गया है, जबकि दूसरा (एक फ़ंक्शन अभिव्यक्ति) नहीं है।
यही कारण है कि आप एक समारोह है कि तुम्हारे जाने के बाद इसे कहते घोषित किया गया है फोन करने में सक्षम हैं:
testFunction();
function testFunction() {}
आप ऐसा नहीं कर सकते कि एक समारोह अभिव्यक्ति के साथ, के बाद से काम होता है यथा-स्थान:
testFunction();
var testFunction = function() {}; //TypeError
वहाँ भी एक तिहाई रूप है (एक नामित समारोह अभिव्यक्ति):
var testFunction = function myFunc() {};
इस मामले में, पहचानकर्ता myFunc
केवल फ़ंक्शन के अंदर दायरे में है, जबकि testFunction
जो भी दायरा घोषित किया गया है, वह उपलब्ध है। लेकिन (और इंटरनेट एक्सप्लोरर की बात आती है तो हमेशा एक है लेकिन संस्करण 9 के नीचे आईई में myFunc
पहचानकर्ता गलत क्षेत्र में गलत तरीके से लीक हो जाता है। नामांकित फ़ंक्शन एक्सप्रेशन उपयोगी होते हैं जब आपको कॉलिंग फ़ंक्शन को संदर्भित करने की आवश्यकता होती है (क्योंकि arguments.callee
बहिष्कृत है)।
भी ध्यान रखें कि एक ही चर घोषणाओं के लिए सच है:
console.log(x); //undefined (not TypeError)
var x = 10;
आप कल्पना कर सकते है कि JavaScript इंजन इस तरह कोड की व्याख्या:
var x; //Declaration is hoisted to top of scope, value is `undefined`
console.log(x);
x = 10; //Assignment happens where you expect it to
स्रोत
2012-06-21 21:13:08
http: // kangax। github.com/nfe/ इसे पढ़ें –
सेकेंड ....... –