为了账号安全,请及时绑定邮箱和手机立即绑定

ES6的问题

ES6的问题

牛奶老哥哥 2017-05-26 11:20:35
为什么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,听一遍会听不懂,多听几遍就好了

查看完整回答
反对 回复 2017-05-29
?
Caballarii

TA贡献1123条经验 获得超629个赞

既然是es6,你会发现,如果你用let x=1,即使你后面是function foo(x=1)也会报错。

以后注意不要写这种容易冲突的代码就行了

查看完整回答
反对 回复 2017-05-26
  • 2 回答
  • 0 关注
  • 1980 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信