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
thisvalue andargumentsprovided 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?