2014-08-28 86 views
0

爲什麼不能正常工作?Selfexectued函數不能正常工作

function init() { 
    // var x = ... 
    // some more code .. 
}(); 

拋出:SyntaxError: Unexpected token)

?爲什麼這項工作很好?

function init() { 
    // var x = ... 
    // some more code .. 
}(init)(); 

我只想要一個函數,它內部有自己的聲明變量,但我不希望該函數可以被訪問。最後一個是我說的,但爲什麼這個工作?我也不知道我是如何得出這個解決方案的。

+0

的https:// WWW。 google.se/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=javascript%20self%20executing%20function – Johan 2014-08-28 19:04:39

+0

這是你在控制檯中測試的東西嗎? – ckersch 2014-08-28 19:05:03

+0

@ckersch是的,是否會有所作爲? – 2014-08-28 19:08:07

回答

1

初始化爲什麼不是這方面的工作?

你試圖立即調用函數聲明function的語句)不是函數表達式function作爲運營商)。你需要做一些事情來讓解釋器把它看作一個表達式。


?爲什麼這項工作很好?

空白意味着在小的JavaScript ,所以

function foo() { 
}(foo)(); 

相同

function foo() { 
} 
(foo)(); 

相同

function foo() { 
} 
foo(); 

即你只是調用它像一個正常的d eclared功能


寫一個 名爲IIFE

最佳做法是

(function foo() { 
    // foo's body 
}()); 

對於匿名IIFE,只是下降了名,並保留其餘相同

2

敢肯定它是這樣的:

(function init() { 
    console.log(3) 
})(); 

你的第二個例子是與此相同,如果你替換功能代碼

1
function init(){} 

返回undefined

(function init(){}) 

返回一個函數。

由於函數定義沒有返回函數,因此不能通過在最後添加parens ()來調用該函數。對於定義和調用一個函數,你應該使用這種模式:

(function init(){})(); 

或者只是使用了一個匿名函數,如果你不需要再打電話init

(function(){})();