2013-01-17 12 views
9

मैं जावास्क्रिप्ट में bind() फ़ंक्शन के बारे में कुछ दस्तावेज़ पढ़ रहा था।बाध्य() को 'अपरिभाषित' पास करने का क्या अर्थ है?

उदाहरणों में से एक इस तरह शुरू होता है:

function list() { 
    return Array.prototype.slice.call(arguments); 
} 

var list1 = list(1, 2, 3); // [1, 2, 3] 

// Create a function with a preset leading argument 
var leadingZeroList = list.bind(undefined, 37); 

var list2 = leadingZeroList(); // [37] 

तो मेरे सवाल है:

वास्तव में यह bind() यहाँ के (undefined, 37) पारित करने के लिए इसका मतलब है क्या करता है?

उत्तर

11

इसका मतलब है कि आप परिणामस्वरूप बाध्य फ़ंक्शन में कुछ भी संदर्भित करने के लिए this नहीं चाहते हैं। दूसरे शब्दों में, यह आश्वस्त करता है कि जब आप अपना बाध्य कार्य कहते हैं, thisundefined होगा। वास्तव में आप निश्चित रूप से ऐसा क्यों करेंगे कोड पर निर्भर करता है; बहुत से फ़ंक्शन this का उपयोग नहीं करते हैं, इसलिए यह साफ होने का एक तरीका है।

ध्यान दें कि गैर कठोर मोड में है, यह मामले कि क्रम undefined के लिए वैश्विक वस्तु (एक ब्राउज़र में window) विकल्प होगा हो सकता है, लेकिन मैं कोई कल्पना है कि उस व्यवहार के अनुबंध मिल सकता है। सख्त मोड में, ऐसा कोई प्रतिस्थापन नहीं किया जाता है।

+0

जब वे "प्रीसेट अग्रणी तर्क" कहते हैं, तो वे 37 का जिक्र कर रहे हैं? (और 'अपरिभाषित' नहीं) – BeeBand

+2

@BeeBand हाँ - 'बाइंड()' का पहला तर्क वह मान है जिसे आप चाहते हैं ' परिणामस्वरूप फ़ंक्शन कहलाते समय सेट किया जाए। बाद के पैरामीटर आवंटन के बिंदु (ओं) पर जो कुछ भी पारित किया जाता है उसके सामने पारित किया जाता है। – Pointy

+0

@ पॉइंट धन्यवाद। क्या –

3

bind का पहला पैरामीटर फ़ंक्शन के अंदर this मान निर्दिष्ट करता है। इसका उपयोग किसी 'विधि' में परिवर्तित करने के लिए किया जा सकता है जो किसी ऑब्जेक्ट पर कार्य करता है। हालांकि अगर आप undefined पास करते हैं तो इसका मतलब है कि यह एक कार्य बनी हुई है। तो उदाहरण में आपने ऊपर वर्णित कोई अंतर नहीं है।

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