2015-05-25 15 views
5

मुझे एक एप्लिकेशन विरासत में मिला, और मैं हर जगह इस जावास्क्रिप्ट संरचना को देखता हूं। ऐसा करने का कारण क्या है। मुझे लगता है कि यह एक अनाम कार्य है और PaymentOffersOverview इसे पास कर दिया जाता है।यह जावास्क्रिप्ट स्वयं निष्पादन कार्य/संरचना कार्य कैसे करता है

var PaymentOffersOverview = PaymentOffersOverview || {}; 

(function(PaymentOffersOverview) { 
    var App = {}; 

    App.Settings = { 
     Id: some Id value 
     // Some Code 
    }; 

    App.ShowLoader = function (message) { 
      // Some Code 
     }; 

    PaymentOffersOverview.App = App; 
})(PaymentOffersOverview); 

लेकिन जो मुझे नहीं मिलता वह अंतिम पंक्ति है। })(PaymentOffersOverview); यह फिर से क्यों गुजरता है?

// Then the code can be used as follow 

alert(PaymentOffersOverview.App.Settings.Id); 

Fiddle

+1

अंतिम पंक्ति आपके अज्ञात फ़ंक्शन को स्वीकार करने वाले पहले पैरामीटर का मान है। – Blauharley

+1

मुझे लगता है कि आपको आईआईएफई पर पढ़ना होगा http://benalman.com/news/2010/11/immediately-invoked-function-expression/ –

+0

@ डेविड जोन्स - धन्यवाद, मुझे लगता है कि समस्या यह थी कि मुझे यकीन नहीं था – R4nc1d

उत्तर

0

यह में फिर से पारित न हो। आखिरी पंक्ति से, बंद होने पर PaymentOffersOverview हो जाता है क्योंकि यह स्वयं-आक्रमणकारी है। यदि यह पारित नहीं हुआ था, तो PaymentOffersOverview बंद होने के भीतर undefined होगा।

// definition of local variable 
var PaymentOffersOverview = PaymentOffersOverview || {}; 

(function(param) { 
    // now we are in the context of the closure where param refers to 
    // PaymentOffersOverview, yet PaymentOffersOverview is not defined 
    // within this scope. It is param. 
    // You can use any name here, using the same is just for convinience. 
    var App = {}; 

    App.Settings = { 
     Id: some Id value 
     // Some Code 
    }; 

    App.ShowLoader = function (message) { 
      // Some Code 
     }; 

    param.App = App; 
})(PaymentOffersOverview); // passing of the variable 
+0

धन्यवाद, यह वास्तव में अब पूरी तरह से समझ में आता है। मेरे लिए अजीब चीज यह थी कि पेमेंटऑफर्स ओवरव्यू फ़ंक्शन में उसी नाम से पारित हो गया था, जिस पर ऑब्जेक्ट शीर्ष पर घोषित किया गया था। तो परम परिवर्तनीय अधिक समझ में आता है। – R4nc1d

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