我正在運行Edge/15.15063。 'Can I Use' says const should work.const在Edge 15開發人員工具中不起作用
運行:
const x = 'woo'
然後:
console.log(x)
返回
'x' is undefined
截圖:
爲什麼不是const工作?
我正在運行Edge/15.15063。 'Can I Use' says const should work.const在Edge 15開發人員工具中不起作用
運行:
const x = 'woo'
然後:
console.log(x)
返回
'x' is undefined
截圖:
爲什麼不是const工作?
我懷疑Edge控制檯正在使用with
語句,其覆蓋範圍爲like other implementations did。這可以解釋var
S和even function
declarations被外界提升到全球範圍內,但let
和const
將被鎖定成塊範圍:
with (…) {
const x = 'woo'
}
// next input:
with (…) {
console.log(x) // obviously undeclared
}
嘗試在多行模式下輸入它們,在一個單一的評價 - 他們在那裏應該工作。
但你可能還需要提交一個bug,作爲控制檯確實有望感覺像在全球範圍內評估的事情。
對於你連接到的幾乎所有的答案的最後一個評論說:「幾個星期前,我們把我們的控制檯在Chrome中的實現從塊轉移到了一些符號魔術上,因爲塊阻塞了一些ES6特點:)「 –
@JaredSmith哈,完美!沒有仔細閱讀它,我只是想鏈接任何顯示實現方法的東西。 – Bergi
我想我明白了這一點,但這和答案一樣多。太長的評論,但。
我認爲發生的事情是,在頂級的範圍以同樣的方式var
不使用時const
和let
do not create隱含的全局變量。雖然使用const
和let
創建的頂級變量是全局變量,但它們不是全局對象的屬性。
如果MS控制檯依賴隱含的window
屬性創建來訪問在控制檯中創建的變量,那麼const
和let
將不起作用。
我不確定Chrome開發工具的內部工作的,但它似乎建立在控制檯執行的代碼一個匿名函數包裝:在匿名1個未被捕獲的錯誤 :
throw new Error;
VM679: 1:7
(function() { throw new Error; })();
VM759:以1個未被捕獲的錯誤 nonymous:1:21 在匿名:1:33
我不確定是否有其他的沙箱會在這裏,我也並不一定能找到大量的文檔資料就可以了。
它是否工作,如果你包裝它'(function(){const x ='woo'; console.log(x);})();'? –
如果你把它放在代碼塊中怎麼辦? '{const x ='woo';的console.log(X); }'? – evolutionxbox
@jared:包裝時工作 – mikemaccana