我在玩一些EcmaScript 2015的功能,我必須說規範很難理解。javascript中默認函數參數的範圍
我完全理解這個代碼應該拋出某種錯誤:
(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 t帽子變量沒有定義。
看來Chrome正在進行一些優化,其中只有1個範圍被創建,其中所有參數設置爲不可訪問,並且在分配後將它們逐個添加。
這方面的一些證據可以是:
(function(a =() => b, b = 2) { return a() === 2; })();
這看起來像我的口味的失蹤機會,我想知道做規範力在這裏只使用1範圍或這僅僅是V8的實施細則。
難道有人請指點我可以澄清這一點的規範嗎?
'缺少機會,讓我taste' - 這是與其他人的語言文字的問題:對 –
參數範圍是它自己的範圍。在函數聲明表達式中,定義爲參數的符號立即佔優勢。所以'(a = a)'沒有意義,因爲左邊的'a'隱藏了'a'在包含的上下文中。 – Pointy