请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于ES6函数默认值的疑问

1
2
3
let x = 1;
function foo(y = x) {};
foo()

    上面的代码是不出错的,首先x=1,调用函数时,y=x=1,相当于y的默认值是1。没有问题

1
2
3
let x = 1;
function foo(x = x) {};
foo()

    将y=x,替换成x=x,为什么就出错了?首先x=1,调用函数时,x=x=1,相当于x的默认值是1。为什么出错呢?

    求解

正在回答 回答被采纳积分+3

插入代码

2回答

提问者 ehuo0123 2017-07-26 17:19:18

https://img1.sycdn.imooc.com/szimg//59785e920001df7605210111.jpg

个人认为是临时死区的问题

这里x=x,这两个x都是形参变量,只能获取实参的值,而不能像y=x里x这个自由变量一样,通过作用域链来获取值。

由于foo()没有参数,所以x=x里,x没有值。由于x正处于临时死区内,所有引用临时死区中绑定的行为都会报错。于是,就报错了

不知是否正确?

0 回复 有任何疑惑可以回复我~
勿忘心安008 2017-07-26 14:42:17

对的。亲测

0 回复 有任何疑惑可以回复我~
  • 提问者 ehuo0123 #1
    什么对的?第二组代码进行结果没有出错的意思?
    出错了
    回复 有任何疑惑可以回复我~ 2017-07-26 17:20:05
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号