关于ES6函数默认值的疑问

来源:3-8 函数扩展

ehuo0123

2017-07-26

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

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

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

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

    求解

写回答

2回答

ehuo0123

提问者

2017-07-26

//szimg.mukewang.com/59785e920001df7605210111.jpg

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

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

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

不知是否正确?

0
0

勿忘心安008

2017-07-26

对的。亲测

0
1
ehuo0123
什么对的?第二组代码进行结果没有出错的意思? 出错了
2017-07-26
共1条回复

ES6零基础教学 解析彩票项目

ES6从零开始,量身设计的迷你案例,让你全面掌握ES6

2579 学习 · 881 问题

查看课程