Pierwsza forma przechodzi przez parametr, podczas gdy druga forma ustawia to, co "to" odnosi się do funkcji wykonującej. Oni są różni.
(function(x){ console.log(this,x); })(jQuery);
//--> [window object]
//--> [jQuery object]
(function(x){ console.log(this,x); }).call(jQuery);
//--> [jQuery object]
//--> undefined
(function(x){ console.log(this,x); }).call(jQuery, jQuery);
//--> [jQuery object]
//--> [jQuery object]
Aby uzyskać więcej informacji, zobacz Function.prototype.call
i Function.prototype.apply
.
Oto przypadek, gdzie może chcesz użyć call
technika:
v = 'oh noes!'
var o = {
v : 42,
f : function(){
console.log(this.v);
(function(){ console.log(this.v) })();
}
};
o.f();
// --> 42
// --> 'oh noes!'
bez ustawiania wartości this
poprzez call()
funkcja self-wywołanie jest wywoływany w zakresie (oknie) Globalnego , a nie bieżący obiekt.
mimo że był to 'call (jQuery, jQuery)' ustawiłby oba. – zzzzBov
@Phrogz Dzięki. Rozumiem. – modernzombie
@zzzzBov oba byłyby [obiekt jQuery], prawda? – modernzombie