ES6的问题

为什么

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呢

牛奶老哥哥
浏览 1981回答 2
2回答

小郎Lie

在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

既然是es6,你会发现,如果你用let x=1,即使你后面是function foo(x=1)也会报错。以后注意不要写这种容易冲突的代码就行了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript