2012-09-04 30 views
6

कृपया बताएं कि यहां किस हैक का उपयोग किया जाता है (मैं देख सकता हूं कि शून्य को इसके संदर्भ की संपत्ति लौटने वाले फ़ंक्शन के संदर्भ के रूप में पारित किया गया है। इसलिए मैं स्पष्ट रूप से समझ नहीं सकता कि वास्तव में क्या हो रहा है यहाँ।फ़ंक्शन कॉल के संदर्भ के रूप में पास किया गया

function getGlobal(){ 
    return (function(){ 
    return this.dust; 
     }).call(null); 
} 

उत्तर

6

संदर्भ को शून्य पर सेट करना this वैश्विक ऑब्जेक्ट को इंगित करेगा। तो प्रदान किया गया कोड वैश्विक वस्तु की dust संपत्ति तक पहुंच के रूप में कार्य करेगा।

ECMA 262 v5 के विनिर्देश के अनुसार, 10.4.3 में प्रवेश कर फंक्शन कोड

if thisArg is null or undefined, set the ThisBinding to the global object. 

http://es5.github.com/#x10.4.3

3

चाल तथ्य यह है कि अगर आप समारोह के एक रिसीवर नहीं है, window (वास्तव में निष्पादित स्क्रिप्ट के वैश्विक वस्तु, इसलिए नाम) प्रयोग किया जाता है का उपयोग करें।

तो यह चाल निकटतम एम्बेडिंग संदर्भ में परिभाषित एक संपत्ति (dust) को बाईपास करने में सक्षम बनाता है और वैश्विक में परिभाषित एक का उपयोग करता है वस्तु।

+0

देखने क्यों सिर्फ 'का उपयोग नहीं सीधे window.dust'? क्या वैश्विक वस्तु कभी-कभी विंडो नहीं हो सकती है? – KOGI

+0

शायद ही कभी एक बिंदु है, यही कारण है कि इस तरह के कोड दुर्लभ है। एक कारण यह हो सकता है कि आप एक लाइब्रेरी बना रहे हैं जिसे आप गैर ब्राउज़र जेएस इंजन (उदा। Node.js) के साथ संगत होना चाहते हैं: फिर वैश्विक ऑब्जेक्ट को 'विंडो' नहीं कहा जाता है। लेकिन आम तौर पर, जब आप लाइब्रेरी बनाते हैं, तो आप वैश्विक ऑब्जेक्ट तक पहुंचने से बचते हैं ... –

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