Trong ví dụ của bạn, bạn chỉ cần có hai câu lệnh và nó tương đương với:
function foo(bar){
return bar;
}
0;
Đây là không chức năng tự gọi. Câu lệnh đầu tiên là khai báo hàm , câu lệnh thứ hai chỉ đơn giản là số 0
bằng chữ, mà không làm gì cả. Dấu ngoặc đơn không thực thi hàm, chúng là grouping operator.
Làm cách nào để chúng tôi có thể chứng minh điều này? Hãy thử:
function foo(bar){
return "bar";
}(0);
và cho tôi biết đầu ra là gì.
Nó sẽ là một chức năng tự gọi, nếu chúng ta có một biểu chức năng. Để làm điều đó bạn có thể sử dụng toán tử nhóm để buộc nó được đánh giá là biểu thức.
Ví dụ:
(function foo(bar){
return bar;
})(0);
Đây là một biểu hiện chức năng đặt tên. Kết quả của biểu thức ((function ....)
) là tham chiếu hàm và (0)
thực thi hàm, chuyển 0
làm đối số.
Vị trí của dấu ngoặc đơn cũng có thể là:
(function foo(bar){
return bar;
}(0));
Có lẽ đây là những gì bạn đã thấy.
Kỹ thuật này đã được rộng rãi thảo luận ở đây: What is the purpose of a self executing function in javascript?
Nguồn
2012-06-21 10:43:59
Nếu bạn chỉ cung cấp một ví dụ xấu, sau đó câu hỏi của bạn là bản sao của (http [làm ngoặc xung quanh một đối tượng JavaScript/chức năng khai/lớp có ý nghĩa gì?]: //stackoverflow.com/questions/440739/what-do-parentheses-surrounding-a-javascript-object-function-class-declaration-m). –