为什么 console.log(z) 会抛出 NaN?

Sha*_*ane 3 javascript ecmascript-6

当它能够w从外部范围拾取时,为什么不能拾取z?

var w = 1, z = 2;
function foo( x = w + 1, y = x + 1, z = z + 1 ) {
 console.log( x, y, z );
}
foo(); 
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 5

它能够w从外部范围内拾取

是的,因为您w的函数中没有变量。

为什么不能接z?

因为您的参数声明了一个名称为 的局部变量z,并且影响了全局变量。但是,本地表达式尚未使用默认表达式中的值进行初始化,并ReferenceError在访问它时抛出 a 。这就像对时间死区let/const,

let z = z + 1;
Run Code Online (Sandbox Code Playgroud)

也会扔。您应该将变量重命名为其他名称以使其工作。