function foo (x = y, y = 2) {
return [x, y]
}
foo() // 报错
这里变量y没有声明, 但是应该是变量未声明报错啊, 怎么会是暂时性死区的原因呢?未声明报错和暂时性死区的明确区别就是,暂时性死区使用了let或const命令, 并且是在块级作用域中,这样理解对吗?
暂时性死区
ES6 明确规定, 如果块级作用域中存在let和const命令, 则这个区块中对这些命令声明的变量从一开始就形成封闭作用域,
let命令声明变量之前, 该变量都是不可用的, 这在语法上称为暂时性死区
看到了一个一样的问题https://segmentfault.com/q/10...
但是babel转换过后的js代码也没有使用let呀
意思就是函数参数也是使用let声明的,你没有传参,函数使用了参数的默认值,将y赋值给x,但是y还没定义,所以不能使用,所以出现暂时性死区。
上面也不全对哈,只能当作暂时性死区理解,具体可以看ES6入门函数默认参数那一部分
看MDN文档,MDN文档对此进行了规定:
“事先定义的参数(左侧)可用于以后的默认参数”
Parameters defined beforehand (to the left) are available to later default parameters