2012-06-21 16 views
28

मैंने कुछ अलग-अलग परियोजनाओं का काम किया है और मैंने jquery/जावास्क्रिप्ट कार्यों को बनाने के दो अलग-अलग तरीकों को देखा है।चर के लिए फ़ंक्शन असाइन करने के बीच अंतर या

पहले:

function testFunction(){ 

}; 

दूसरा:

var testFunction = function(){ 

}; 

इन के बीच एक अंतर है?

+3

http: // kangax। github.com/nfe/ इसे पढ़ें –

+0

सेकेंड ....... –

उत्तर

43

मुख्य अंतर पहला है (एक फ़ंक्शन घोषणा) को उस दायरे के शीर्ष पर फिसल गया है जिसमें दूसरा घोषित किया गया है, जबकि दूसरा (एक फ़ंक्शन अभिव्यक्ति) नहीं है।

यही कारण है कि आप एक समारोह है कि तुम्हारे जाने के बाद इसे कहते घोषित किया गया है फोन करने में सक्षम हैं:

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 
+8

+1 *** ज्ञान *** मुझे नहीं पता था कि यह कैसे काम करता है। मैंने 'var testFunction = function() {}' के साथ समस्याओं में भाग लिया है और क्यों नहीं पता था। यह पूरी तरह से समझ में आता है। – iambriansreed

+0

आईई 9 ने उस बग को सही किया, हालांकि, सही? –

+0

@ ŠimeVidas - ठीक है। मैं इसे जोड़ दूंगा। –

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