2013-07-12 124 views
8

是否有差異之間:差異,並呼籲

(function(){ 

}).call(this); 

(function(){ 

})(); 

var MODULE = {}; 
(function(){ 
    this.hello = 'world' 
}).call(MODULE); 

var MODULE = {}; 
(function(m){ 
    m.hello = 'world' 
})(MODULE); 

我經常在編譯的javascript中看到第一個案例。他們都會創建一個範圍並且很好地完成他們的命名空間。

有什麼不同或者是它只是一個品味的問題。

編輯:爲什麼會編譯的JavaScript就可以使用call在IIFE?

+0

你是什麼意思「編譯的JavaScript」是什麼意思? –

+0

像coffescript,或合金鈦 –

+0

那就真的取決於'this'是在調用點;在大多數情況下,不會有區別,因爲所有代碼都被它包裝。 –

回答

7
(function(){ 

}).call(this); 

調用匿名函數,其中函數內部的this將指向this引用的對象調用時。

(function(){ 

})(); 

調用匿名函數,其中函數內部的this將指向全局對象(或在嚴格模式下未定義)

演示:Fiddle

+0

爲什麼大多數編譯的JavaScript使用call而不是iifee?如果我用一個調用(this)創建一個函數,這將等於window(全局對象),所以它有點不一樣? –

+0

@JonathandeM。我認爲這是一個品味的問題,而不是其他任何區別 –

+5

注意,在嚴格模式,這* *在第二個例子是不確定的。 – RobG