2014-02-12 94 views
0

我在腳本中讀過一次,但我不明白它的好處。爲什麼會有人使用這種模式?

(function() {}).call(this); 

而且,我試圖運行它,

(function() { console.log('Hello World') }).call(this); 

但它並沒有顯示任何信息。

即使調用這個(function() { console.log('Hello World') })()也沒有打印任何東西。怎麼了?

+0

運行它時會打印Hello World,只是在螢火蟲控制檯上試過。 – Tarek

+0

我在控制檯上運行它,但沒有打印。 –

+0

它爲我打印。 – Ford

回答

0

可能作者想改變IIFE的背景。傳遞this將毫無意義,因爲即使沒有call,它也會引用window

像這樣的的範圍內改變this含義:

(function() { console.log('Hello World', this) }).call({foo:1}); 

不過,我還是不明白這一點,因爲你不妨做這樣的:

(function (fooObj) { console.log('Hello World', fooObj) })({foo:1}); 

我想說的更常見。

+0

你假設它是在全球環境中執行的。 –

+0

@cookiemonster好吧,沒有OP的更好解釋,人們只能假設它是這樣的 – Johan

+0

爲什麼?沒有必要做出這樣的假設。至於你答案的第二部分,考慮JS正在得到一個新的函數語法,它有一個詞法定義的'this',這將使得包含'this'的值可能很重要。 –

2

我用this時,我想我的代碼在任何一個瀏覽器窗口的工作(在這種情況下thiswindow一個web worker(在這種情況下this指工人實例)。

.call(this)適用於此,雖然當然你可以做不同的事情。例如,這也可以工作:

(function(root) { 

    root.MyLibrary = MyLibrary; 

}(this)); 

與往常一樣,皮膚上有很多方法可以使諺語貓變得皮膚黝黑。

+0

在'webworker'中,它會引用'self',不是嗎? – Xotic750

+0

@ Xotic750從我在web worker'self'和'this'的經驗中,引用同一個(worker)對象。說實話,我不知道他們爲什麼介紹'自我'... –

+0

也許與''使用嚴格'有關';'? :/ – Xotic750