2011-03-30 35 views
9

मैं जावास्क्रिप्ट, में इस घटना जहां एक पूरी स्क्रिप्ट एक समारोह कॉल में लपेटा जाता है के साथ कुछ समय में आए गए हैं में पूरी स्क्रिप्ट रैपिंग, इस तरह:जावास्क्रिप्ट: एक समारोह कॉल

(function() { 
    // statements... 
})(); 

रियल दुनिया उदाहरण , glow.mozilla.com क्लाइंट-साइड कोड से: https://github.com/potch/glow/blob/master/media/glow.js

इस कोडिंग शैली के लिए क्या उपयोग किया जाता है? लपेटा फ़ंक्शन शैली के साथ और उसके बीच क्या अंतर है और इसका उपयोग कब किया जाना चाहिए?

उत्तर

13

ऐसा करने से यह सुनिश्चित होता है कि आपके द्वारा परिभाषित किए गए किसी भी चर/कार्य को वैश्विक दायरे में नहीं जाना चाहिए। पृष्ठ में शामिल सभी स्क्रिप्ट्स एक ही वैश्विक दायरे को साझा करते हैं, इसलिए यदि आप एक ही नाम के साथ दो अलग-अलग स्क्रिप्ट में दो चर परिभाषित करते हैं, तो वे वास्तव में समान चर का संदर्भ लेते हैं।

उदाहरण के लिए, आप a.js और b.js, इसलिए तरह परिभाषित किया गया है लगता है:

// a.js 
var node = document.getElementById("something"); 

function frob() { 
    node.style.display = "none"; 
} 

// b.js 
var node = document.getElementById("something-else"); 

आप अपने पृष्ठ में a.js के बाद b.js शामिल हैं तो जब आप frob फोन यह जा रहा है "कुछ" नोड के बजाय "कुछ और" नोड को छिपाने के लिए जैसे आप उम्मीद करेंगे।

// a.js 
(function() { 
    var node = document.getElementById("something"); 

    window.frob = function() { 
     node.style.display = "none"; 
    } 
})(); 

// b.js 
(function() { 
    var node = document.getElementById("something-else"); 
})(); 

और b.js अंदर सामान क्या a.js. में है के साथ हस्तक्षेप करने नहीं जा रहा है:

इसके बजाय, आप की तरह कुछ कर सकते हैं

ध्यान दें कि वास्तव में मैं सीधे window पर कार्यों नहीं जोड़ना होगा, बजाय मुझे लगता है कि glow.js क्या स्क्रिप्ट आप से जुड़ा हुआ है के लिए इसी तरह कुछ करना होगा: एकल वैश्विक चर है कि मेरी स्क्रिप्ट "नाम स्थान" का प्रतिनिधित्व करता है। उदाहरण के लिए, jQuery में, वह एकल वैरिएबल चर $ (या jQuery) है।

+0

बहुत बहुत धन्यवाद, अब यह बहुत स्पष्ट है। – Michael

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