来自变量的JS默认参数值:为什么必须标识符不同?

Sam*_*ams 6 javascript variable-assignment ecmascript-6

指定使用变量名称相同的默认值扔引用错误:

var a = 'adef';
var x = (a=a) => console.log(a);
x();
=> "ReferenceError: a is not defined"
Run Code Online (Sandbox Code Playgroud)

但这很好:

var other = 'otherdef';
var x = (a=other) => console.log(a);
x();
=> "otherdef"
Run Code Online (Sandbox Code Playgroud)

我的假设是,价值a在外部范围将被分配到新的范围.

我已经尝试使用const代替var,和class/ function代替箭头功能,但结果总是相同的(在铬63和节点6测试).

我有一种感觉的问题是,a在分配过程中"升起"等分配指的是新的"A"(其存在,但未定义)...

Gha*_*nes 0

此行为的目的是允许一个参数默认初始化为另一个参数的值,例如:

var a = 2;
var x = (a, b = a) => console.log(a, b);
x(42); // 42 42
Run Code Online (Sandbox Code Playgroud)

可以使特殊情况a = a以不同的方式工作,但这会使重构使用此行为的函数变得更加困难(如果不重命名参数所依赖的变量,则无法重命名参数)。a