fak*_*ood 34 javascript shadowing
我在Eloquent Javascript(第3章)中学习了变量阴影这个术语,但我试图理解这个概念的一个精确的基本例子.
这是阴影的一个例子吗?
var currencySymbol = "$";
function showMoney(amount) {
var currencySymbol = "€";
document.write(currencySymbol + amount);
}
showMoney("100");?
Run Code Online (Sandbox Code Playgroud)
Mad*_*iha 28
这也就是所谓的变量范围.
变量仅存在于其包含的函数/方法/类中,并且这些变量将覆盖属于更宽范围的任何变量.
这就是为什么在你的例子中,将显示一个欧元符号,而不是一美元.(因为currencySymbol包含美元的范围比currencySymbol包含欧元符号的范围更宽(全局).
至于你的具体问题:是的,这是变量阴影的一个很好的例子.
Eri*_*son 15
在计算机编程中,当在特定范围内声明的变量(决策块,方法或内部类)与在外部范围中声明的变量具有相同的名称时,会发生变量阴影.这个外部变量据说被遮蔽了......
所以我相信你的榜样很好.
你有一个全局命名变量,它与内部方法共享同一个名称.内部变量将仅用于该函数.没有该变量声明的其他函数将使用全局函数.
是的,你的例子是阴影的一个例子.
由于JavaScript中的闭包工作方式,阴影将在其他场景中持续存在.这是一个例子:
var x = -1;
function xCounter() {
var x = 0;
return function() {
++x;
return x;
};
}
console.log(x); // -1
counter = xCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(x); // still -1, global was never touched
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,即使xCounter返回,它返回的函数仍然具有对它自己的引用,x并且该内部函数的调用对全局没有影响,即使原始版本已经超出范围.