2015-05-25 20 views
5

Tôi thừa kế một ứng dụng, và tôi thấy cấu trúc JavaScript này ở khắp mọi nơi. Lý do để tạo ra nó như thế. Tôi hiểu rằng đó là một chức năng ẩn danh và rằng PaymentOffersOverview được chuyển cho nó.Làm thế nào để javascript tự thực hiện chức năng/cấu trúc này làm việc

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); 

Nhưng những gì tôi không nhận được là dòng cuối cùng. })(PaymentOffersOverview); Tại sao nó lại được truyền lại?

// Then the code can be used as follow 

alert(PaymentOffersOverview.App.Settings.Id); 

Fiddle

+1

dòng cuối cùng là giá trị của thông số đầu tiên mà hàm ẩn danh của bạn chấp nhận. – Blauharley

+1

Tôi nghĩ bạn cần phải đọc trên IIFE http://benalman.com/news/2010/11/immediately-invoked-function-expression/ –

+0

@DavidJones - Cảm ơn tôi sẽ, tôi nghĩ rằng vấn đề là tôi không chắc chắn những gì để tìm kiếm – R4nc1d

Trả lời

0

Nó không có được thông qua trong một lần nữa. Bởi dòng cuối cùng, việc đóng cửa được PaymentOffersOverview vì nó là tự gọi. Nếu nó không được thông qua, PaymentOffersOverview trong phạm vi đóng sẽ là 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

Cảm ơn, nó thực sự làm cho cảm giác hoàn toàn ngay bây giờ. Điều kỳ lạ đối với tôi là PaymentOffersOverview đã được chuyển vào hàm có cùng tên với đối tượng được khai báo ở trên cùng. Vì vậy, biến param có ý nghĩa hơn. – R4nc1d

Các vấn đề liên quan