如下:是一段MDN上的一段代码
var x = 0;
function f(){
var x = y = 1; // x在函数内部声明,y不是!
}
f();
console.log(x, y); // 0, 1
// x是全局变量。
// y是隐式声明的全局变量。
问:
1.为什么结果是 0,1
2.代码注释为什么说“x在函数内部声明,y不是!”
3.什么样的算是隐式声明的全局变量
基于以上,我改变了一下代码,如下:
function f(){var a = b = 1; }
f();
console.log(b);// 1
console.log(a);// a is not defined
问:为什么a is not defined
麻烦会的同学帮忙解答一下,谢谢!
两个点。
1.
var x = y = 1
等价于var x; x = y = 1
即跳过了
y
的声明,直接创建了全局变量y
2.
console.log(x,y)
访问的x,y
都是全局变量,答案就很明显了原因见上个回答第一点
除去宿主环境本身的变量,其他所有未经
var/let/const
创建的全局变量都是“隐式声明的全局变量”还是见第一个回答的第一条,
a
是函数f
的局部变量,无法在局部作用域外部访问