2011-09-28 15 views
5

Trên một số mã JS trên một số trang web mà tôi nhìn thấy mã Javascript như thế này:Mã này trong Javascript là gì?

SomeName.init = (function() { 
    // some stuff 
})(); 

Ý tôi là, đây không phải là một mã jQuery plugin như thế này:

(function($){ 
    $.fn.myPlugin = function() { 

    // Do your awesome plugin stuff here 

    }; 
})(jQuery); 

Sau đó, nó là gì ? và đối tượng JS kết quả là gì?

+0

Tôi ... không chắc chắn những gì bạn đang yêu cầu. Cả hai đoạn mã đều thể hiện một hàm được khai báo và thi hành. Ngoài ra, họ không có vẻ liên quan. –

+0

Thứ nhất là thiết lập kết quả của một hàm ẩn danh thành một biến có tên là "init". Và như đã thấy trong ví dụ thứ 2, hàm ẩn danh là một mẫu thiết kế thường được sử dụng trong việc tạo ra (hoặc các mô-đun) của PLUG-IN và do đó thường được gọi là 'Mô-đun mô-đun'. –

+0

[Đây là những gì tôi tìm thấy] (http://stackoverflow.com/questions/5101638/what-does-this-javascript-code-mean) khi tôi nhập tiêu đề của bạn vào hộp tìm kiếm. – user113716

Trả lời

2

Module Pattern. Và hai đoạn này có nhiều điểm chung hơn bạn nghĩ.

8

Đó là một chức năng ẩn danh, không làm biến các biến số thành phạm vi toàn cầu khi khai báo biến bằng cách sử dụng var.

SomeName.init = (function() { 
    return 3.1415; 
})(); 

SomeName.init là một con số (3,1415), bởi vì () sau khi khai báo hàm vô danh thực hiện các chức năng. Không có cách nào để lấy hàm ban đầu, trừ khi được xác định trong hàm ẩn danh:

(function foo(){ 
    //foo refers to this function 
    too = foo; 
})();; 
//foo is undefined 
//too refers to the function, because `too` has been defined without var 
0

Bất kể hàm nào trả về.

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

Được sử dụng làm cách để mã không gian tên hoặc khai báo các nhà thầu tự thực thi. Các đối tượng kết quả là bất cứ điều gì mà tự thực hiện chức năng trả về.

Đoạn mã thứ hai không trả về bất kỳ thứ gì và không có resulting JS object.

1
(function() { 
    // some stuff 
})() 

là một chức năng ẩn danh tự gọi ngay lập tức. Nó chỉ là một đóng cửa xung quanh mã bên trong để ngăn chặn phạm vi biến trở thành toàn cầu.