我在腳本中讀過一次,但我不明白它的好處。爲什麼會有人使用這種模式?
(function() {}).call(this);
而且,我試圖運行它,
(function() { console.log('Hello World') }).call(this);
但它並沒有顯示任何信息。
即使調用這個(function() { console.log('Hello World') })()
也沒有打印任何東西。怎麼了?
我在腳本中讀過一次,但我不明白它的好處。爲什麼會有人使用這種模式?
(function() {}).call(this);
而且,我試圖運行它,
(function() { console.log('Hello World') }).call(this);
但它並沒有顯示任何信息。
即使調用這個(function() { console.log('Hello World') })()
也沒有打印任何東西。怎麼了?
可能作者想改變IIFE的背景。傳遞this
將毫無意義,因爲即使沒有call
,它也會引用window
。
像這樣的的範圍內改變this
含義:
(function() { console.log('Hello World', this) }).call({foo:1});
不過,我還是不明白這一點,因爲你不妨做這樣的:
(function (fooObj) { console.log('Hello World', fooObj) })({foo:1});
我想說的更常見。
你假設它是在全球環境中執行的。 –
@cookiemonster好吧,沒有OP的更好解釋,人們只能假設它是這樣的 – Johan
爲什麼?沒有必要做出這樣的假設。至於你答案的第二部分,考慮JS正在得到一個新的函數語法,它有一個詞法定義的'this',這將使得包含'this'的值可能很重要。 –
我用this
時,我想我的代碼在任何一個瀏覽器窗口的工作(在這種情況下this
指window
)或一個web worker(在這種情況下this
指工人實例)。
.call(this)
適用於此,雖然當然你可以做不同的事情。例如,這也可以工作:
(function(root) {
root.MyLibrary = MyLibrary;
}(this));
與往常一樣,皮膚上有很多方法可以使諺語貓變得皮膚黝黑。
運行它時會打印Hello World,只是在螢火蟲控制檯上試過。 – Tarek
我在控制檯上運行它,但沒有打印。 –
它爲我打印。 – Ford