我正在玩一些EcmaScript 2015功能,我必须说该规范很难理解。
我完全理解这段代码应该引发某种错误:
(function(a = b, b = 1) { })();
而且我知道默认值可以使用外部范围:
(function() {
let c = 1;
return (function(a = c) { return a === 1; })();
})();
但是我不明白为什么这些例子不好:
(function() {
let a = 1;
(function(a = a) { })();
})();
(function() {
let b = 1;
(function(a = b, b = 2) { })();
})();
我的Chrome 59.0.3071.115抛出ReferenceError,该变量未定义。
Chrome似乎在进行一些优化,其中仅创建1个作用域,将所有参数设置为不可访问,并在分配后将它们一一添加。
一些证明可能是:
(function(a = () => b, b = 2) { return a() === 2; })();
我觉得这似乎是一个错失的机会,我想知道规范是否在这里只使用1个作用域,或者这仅仅是v8实现细节。
有人可以指出我在规范中可以澄清这一点吗?
慕慕森
智慧大石
相关分类