猿问

请问函数参数声明是let声明的吗?

var x = 1;function foo(x = x) {  // ...}

foo() // ReferenceError: x is not defined

上面代码中,参数x = x形成一个单独作用域。实际执行的是let x = x,由于暂时性死区的原因,这行代码会报错”x 未定义“。

以上是阮一峰老师的教程内容 http://es6.ruanyifeng.com/#do...

想请教一个问题,如果是let声明的话,那么为什么如果在函数体内用var重复声明变量x没有报错呢?

一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。

如果是这个原因,那么为什么用let重复声明就会报错呢,毕竟是不同的作用域

-------------------分隔线-------------------

呃,非常感谢大家的回答,我理解什么是let的暂时性死区。。我不明白的是,为什么说函数参数是let声明的


慕勒3428872
浏览 389回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答