Javascript 参数将不会被提升,并将触及暂时死区?

Javascript 参数将不会被提升,并将触及暂时死区?,javascript,Javascript,功能条(x=y,y=2){ 返回[x,y]; } bar()//未捕获参考:y未定义您的假设是错误的,它们没有像那样被提升。更像是: function bar() { let x = arguments.length >= 1 ? arguments[0] : y; { let y = arguments.length >= 2 ? arguments[1] : 2; return [x, y]; } } 每个变量默认值的范

功能条(x=y,y=2){
返回[x,y];
}

bar()//未捕获参考:y未定义
您的假设是错误的,它们没有像那样被提升。更像是:

function bar() {
    let x = arguments.length >= 1 ? arguments[0] : y;
    {
        let y = arguments.length >= 2 ? arguments[1] : 2;

        return [x, y];
    }
}

每个变量默认值的范围仅包括其左侧的变量,而不包括右侧的变量。

即使定义了
y
,这在JavaScript中仍然是个问题。@PHPglue:您能详细说明一下以支持您的语句吗?
var y=3;函数条(x=y,y=2){return[x,y];}bar()
@PHPglue:这不是我的意思,我所期望的提升部分在
功能范围内的某个地方。编译器解释的
bar
的内容应该是Barmar的回答,我期望“然而这是JS,x和y都应该先被同等地提升,这样的引用不应该抛出异常”???ErrorHi@Barmar,我可以假设函数的参数默认为
let
?但是
let
在ES6之前的环境中并不存在。查看我的更新,通过将代码从
let
更改为
var
将得到我期望的结果,而不抛出exceptionOk,我知道我又错了,因为没有
默认参数。非常感谢你的回答!即使有,我的回答也只是一个比喻,而不是实际的实施。