Ho visto un pochi altro gli sviluppatori parlano di scope vincolanti in JavaScript, ma mi è sempre sembrato che questa frase sia imprecisa. Function.prototype.call
e Function.prototype.apply
non passano l'ambito tra due metodi; cambiano il chiamante della funzione - due cose molto diverse. Ad esempio:
function outer()
{
var item = { foo: 'foo' };
var bar = 'bar';
inner.apply(item, null);
}
function inner()
{
console.log(this.foo); //foo
console.log(bar); //ReferenceError: bar is not defined
}
Se l'ambito di outer
è stato realmente passato a inner
, mi aspetto che inner
sia in grado di accedere a bar
, ma non può. bar
era nell'ambito in outer
ed è fuori ambito in inner
. Quindi, l'ambito non è stato superato. Anche i documenti Mozilla non menzionano nulla sul passaggio dell'ambito:
Calls a function with a given
this
value andarguments
provided as an array.
Sto fraintendendo l'ambito o specificamente l'ambito in cui si applica a JavaScript? O sono questi altri sviluppatori che lo fraintendono?