2013-07-12 5 views
8

C'è una differenza tra:Differenza tra IIFE e chiamare

(function(){ 

}).call(this); 

e

(function(){ 

})(); 

o

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

e

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

Spesso vedo il primo caso in javascript compilato. Entrambi creerebbero un ambito e faranno bene il loro lavoro sul namespace.

C'è qualche differenza o è solo una questione di gusti.

Modifica: E perché sarebbe stato compilato javascript utilizzare la chiamata su IIFE?

+0

Che cosa si intende per "javascript compilato"? –

+0

come coffescript, o lega per Titanium –

+0

Dipende davvero da cosa 'questo' è al punto di chiamare; nella maggior parte dei casi non ci sarà alcuna differenza perché tutto il codice è incluso in esso. –

risposta

7
(function(){ 

}).call(this); 

chiama la funzione anonima in cui il this all'interno della funzione punterà all'oggetto sollevata dal this quando la chiamata è stata effettuata.

(function(){ 

})(); 

chiama la funzione anonima in cui l'this all'interno della funzione punterà all'oggetto globale (o non definito in modalità rigorosa)

Demo: Fiddle

+0

Perché la maggior parte del javascript compilato usa la chiamata invece di iifee? Se creo una funzione con una chiamata (questa), questa sarà uguale alla finestra (oggetto globale), quindi è un po 'lo stesso no? –

+0

@ JonathandeM. Penso che sia una questione di gusti piuttosto che qualsiasi altra differenza –

+5

Si noti che in modalità rigorosa, * questo * nel secondo esempio non sarà definito. – RobG