我正在使用一些 EcmaScript 2015 功能,我必须说该规范相当难以理解。
我完全理解这段代码应该抛出某种错误:
(function(a = b, b = 1) { })();
Run Code Online (Sandbox Code Playgroud)
我知道默认值可以使用外部范围:
(function() {
let c = 1;
return (function(a = c) { return a === 1; })();
})();
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么这些例子不好:
(function() {
let a = 1;
(function(a = a) { })();
})();
(function() {
let b = 1;
(function(a = b, b = 2) { })();
})();
Run Code Online (Sandbox Code Playgroud)
我的 Chrome 59.0.3071.115 抛出 ReferenceError 变量未定义。
Chrome 似乎正在做一些优化,只创建 1 个范围,所有参数都设置为不可访问,并且在分配后将它们一一添加。
这方面的一些证据可能是:
(function(a = () => b, b = 2) { return …Run Code Online (Sandbox Code Playgroud)