我有一些函数和变量:
function b() {
myvar = 1;
console.log(myvar);
a();
}
myvar = 5;
a();
b();
a();
function a() {
console.log(myvar);
}
控制台日志输出为:5, 1, 1, 1
。为什么最后一个a()调用将“ 1”作为输出而不是“ 5”?因为我以为a()是从全局上下文中调用的,并且此全局上下文具有myvar = 5作为其外部变量(向上一级)?
答案 0 :(得分:2)
此代码中没有 local 变量-每个变量名引用都是对全局变量的引用,因此,每当发生重新分配时,都会重新分配该全局变量。
如果b
重新分配了名为myvar
的 local 变量,那么您是正确的,例如,如果myvar
中的b
是一个参数,或在var/let/const
内用b
声明:
function b() {
// next line has "var",
// indicating that whenever the following variable name is used inside this function
// it'll be referring to a local variable, not the global `myvar`:
var myvar = 1;
console.log(myvar);
a();
}
myvar = 5;
a();
b();
a();
function a() {
console.log(myvar);
}