3 回答
TA贡献1802条经验 获得超5个赞
1.为什么结果是 0,1
两个点。
1.var x = y = 1
等价于 var x; x = y = 1
即跳过了y
的声明,直接创建了全局变量y
2.console.log(x,y)
访问的x,y
都是全局变量,答案就很明显了
2.代码注释为什么说“x在函数内部声明,y不是!”
原因见上个回答第一点
3.什么样的算是隐式声明的全局变量
除去宿主环境本身的变量,其他所有未经var/let/const
创建的全局变量都是“隐式声明的全局变量”
问:为什么a is not defined
还是见第一个回答的第一条,a
是函数f
的局部变量,无法在局部作用域外部访问
TA贡献1942条经验 获得超3个赞
使用var定义的变量,使用范围局限于当前作用域和子作用域。
你的代码可以等价于:
var x = 0;
var ccc = 3;
function f(){
// y没有var约束,会寻找上一级的作用域,显然上一级也没有定义y,那算是全局的了
y = 1;
// x用var定义,那么相当于是一个新的变量`var x_new_define = y`
// 此时请忘记外部的x,这个函数被新的x占用,两个x毫不相关
var x = y;
// z只局限于当前(函数内)作用域,出不了这个函数
var z = 1;
// 没有var约束,找上一级,上一级有ccc的var约束
ccc = 5;
}
f();
console.log(x, y); // 0, 1
// 这个作用域没有z,肯定要报错的
console.log(z); // throw Error
console.log(ccc); // 5
总的来说,你现在还不理解js的基础部分,建议多看下书,尤其是作用域相关的知识点,然后多写几个小demo试试
添加回答
举报