kyl*_*lex 31 javascript scoping
或者更具体到我需要的东西:
如果我从另一个函数中调用一个函数,它是从调用函数中还是从上面的级别中提取变量?例如:
myVar=0;
function runMe(){
myVar = 10;
callMe();
}
function callMe(){
addMe = myVar+10;
}
Run Code Online (Sandbox Code Playgroud)
如果通过runMe()调用callMe(),myVar最终会是什么?
Mat*_*hen 49
杰夫是对的.请注意,这实际上并不是静态作用域的一个很好的测试(JS确实有).更好的是:
myVar=0;
function runMe(){
var myVar = 10;
callMe();
}
function callMe(){
addMe = myVar+10;
}
runMe();
alert(addMe);
alert(myVar);
Run Code Online (Sandbox Code Playgroud)
在静态范围的语言(如JS)中,警告10和0. runMe中的var myVar(局部变量)会影响该函数中的全局myVar.但是,它在callMe中没有任何效果,因此callMe使用仍为0的全局myVar.
在动态范围的语言中(与 JS 不同),callMe将从runMe继承范围,因此addMe将变为20.请注意,myVar在警报时仍为0,因为警报不会从任一函数继承范围.
如果您的下一行是callMe(); ,则addMe将为10,而myVar将为0。
如果您的下一行是runMe(); ,则addMe将为20,而myVar将为10。
请原谅我问-这与静态/动态绑定有什么关系?myVar不仅是一个全局变量,而且程序代码(将所有内容都包装到调用堆栈中)不会确定这些值吗?