为什么var x = 1;
function foo(x = x) {
// ...
}
foo() //x is not defined会报错,而var x = 1;
function f(y = x) {
console.log(y);
}
f() //1就能得出结果1呢
2 回答
已采纳
小郎Lie
TA贡献2条经验 获得超0个赞
在JS初始化变量阶段,有以下的顺序
1:初始化函数参数
2:初始化函数,如果有冲突,会覆盖
3:初始化变量,如果有冲突,忽略
因此,你第一段代码在初始化时的顺序是:
1.初始化参数x=undefined,2.初始化函数foo,指向函数foo的执行上下文,3.初始化变量x,但是此时有冲突,因此忽略,x仍然为undefined
因此第一段代码执行时会报x为undefined
第二段代码的初始化顺序是
1.初始化参数y=undefined,2.初始化函数foo,指向函数foo的执行上下文,3.初始化变量x=undefined
执行代码时,会将x=1赋值给y,因此返回1
详情参考"Javascript深入浅出"第7章7-3,听一遍会听不懂,多听几遍就好了
Caballarii
TA贡献1123条经验 获得超629个赞
既然是es6,你会发现,如果你用let x=1,即使你后面是function foo(x=1)也会报错。
以后注意不要写这种容易冲突的代码就行了
添加回答
举报
0/150
提交
取消