2013-07-31 29 views
8

Tôi đã kiểm tra ra các quy tắc ứng has.js và lúng túng bởi dấu chấm phẩy đầu tiên ở đây:Mục đích của dấu chấm phẩy trước một IIFE là gì?

;(function(g){ 
    // code 
}()(this); 

Theo như tôi biết, nó hoàn toàn không có gì. Nó không đặt hàm ở vị trí biểu thức là () hoặc ! làm: (function(){}()) hoặc !function(){}(). Nó có vẻ chỉ đơn thuần là một dòng ender cho một dòng trống.

Mục đích của dấu chấm phẩy này là gì? Một mong muốn OCD đối xứng giữa đầu và cuối của IIFE? :)

+0

Yep, dupe, thanks! – mwcz

+0

Không có vấn đề @ mwcz^_ ^ – Neal

Trả lời

21

Nó ở đó để ngăn chặn bất kỳ mã nào trước đó thực thi mã của bạn làm đối số cho hàm.

tức

mybrokenfunction = function(){ 

} //no semicolon here 
(function(g){ 


})(this); 

sẽ thực hiện mybrokenfunction với chức năng ẩn danh của bạn như là đối số của nó:

mybrokenfunction = function(){}(function(g){})(this); 

Nếu bạn có thể đảm bảo rằng sẽ không có một unterminated (không dấu chấm phẩy) chức năng trước khi bạn, bạn có thể bỏ qua dấu chấm phẩy bắt đầu, nhưng bạn không thể, do đó, nó chỉ an toàn hơn để đặt dấu chấm phẩy thừa đó.

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