Sự khác nhau giữa các chức năng này là gì? Cảm ơn bạn đã trả lời!Chức năng tự gọi trong JavaScript
Function # 1
var myQuery = (function() {
(...)
})();
Function # 2
var myQuery = (function() {
(...)
});
Sự khác nhau giữa các chức năng này là gì? Cảm ơn bạn đã trả lời!Chức năng tự gọi trong JavaScript
Function # 1
var myQuery = (function() {
(...)
})();
Function # 2
var myQuery = (function() {
(...)
});
Trong trường hợp đầu tiên, bạn đang tự gọi hàm theo nghĩa đen và gán giá trị của lời gọi đến biến số myQuery
.
Trong trường hợp thứ hai, bạn chỉ định tham chiếu đến hàm ẩn danh mà bạn đã xác định. Ở đây, myQuery
hoạt động như con trỏ hoặc tham chiếu đến hàm.
Để minh họa rõ hơn điều này.
var myQuery = (function() {
return "Hello";
})();
Trong trường hợp này, myQuery
chứa giá trị Hello
. Bây giờ nếu bạn có:
var myQuery = (function() {
return "Hello";
});
myQuery
chứa tham chiếu đến hàm. Nếu bạn đã sử dụng console.log
trong Firebug để xuất giá trị này, bạn sẽ thấy function()
. Tham chiếu này là thứ bạn có thể vượt qua hoặc thậm chí gọi. Vì vậy:
var myQuery = (function() {
return "Hello";
});
var value = myQuery();
Bây giờ, value
sẽ chứa Hello
. Hy vọng điều này giải thích sự khác biệt.
Người đầu tiên là một hàm tự gọi, gọi với một danh sách tham số có sản phẩm nào. Giá trị của myQuery sẽ là những gì hàm này trả về.
Cách thứ hai là gán đơn giản cho một hàm ẩn danh. Không có lời gọi nào trong cái này.
Tôi sẽ đơn giản hóa Function #2
và có lẽ điều đó sẽ hiển thị tốt hơn sự khác biệt.
var myQuery = function(){ (...) };
Trong hàm # 2, bạn đang nói "Chỉ định myQuery tham chiếu đến hàm này". Trong hàm số 1, bạn đang nói "Gán myQuery giá trị của cuộc gọi đến hàm này".
Bạn được chào đón nhất. – Kivin
tốt chức năng đầu tiên thực hiện như dòng được truyền và thứ hai sẽ phải được thực hiện để có được giá trị
Ví dụ: http://jsfiddle.net/yVrwX/
Cảm ơn sự giúp đỡ của bạn! –
@Randy: Cũng lưu ý rằng trong trường hợp thứ hai bạn không cần các dấu ngoặc đơn xung quanh, vì vậy 'var myQuery = function() {…};' sẽ giống nhau. –
@Marcel Hãy quên rằng quá. Cảm ơn :) –