2017-05-31 107 views
6

我正在運行Edge/15.15063。 'Can I Use' says const should work.const在Edge 15開發人員工具中不起作用

運行:

const x = 'woo' 

然後:

console.log(x) 

返回

'x' is undefined 

截圖:

enter image description here

爲什麼不是const工作?

+1

它是否工作,如果你包裝它'(function(){const x ='woo'; console.log(x);})();'? –

+0

如果你把它放在代碼塊中怎麼辦? '{const x ='woo';的console.log(X); }'? – evolutionxbox

+0

@jared:包裝時工作 – mikemaccana

回答

2

我懷疑Edge控制檯正在使用with語句,其覆蓋範圍爲like other implementations did。這可以解釋var S和even function declarations被外界提升到全球範圍內,但letconst將被鎖定成塊範圍:

with (…) { 
    const x = 'woo' 
} 
// next input: 
with (…) { 
    console.log(x) // obviously undeclared 
} 

嘗試在多行模式下輸入它們,在一個單一的評價 - 他們在那裏應該工作。

但你可能還需要提交一個bug,作爲控制檯確實有望感覺像在全球範圍內評估的事情。

+1

對於你連接到的幾乎所有的答案的最後一個評論說:「幾個星期前,我們把我們的控制檯在Chrome中的實現從塊轉移到了一些符號魔術上,因爲塊阻塞了一些ES6特點:)「 –

+0

@JaredSmith哈,完美!沒有仔細閱讀它,我只是想鏈接任何顯示實現方法的東西。 – Bergi

1

我想我明白了這一點,但這和答案一樣多。太長的評論,但。

認爲發生的事情是,在頂級的範圍以同樣的方式var不使用時constletdo not create隱含的全局變量。雖然使用constlet創建的頂級變量是全局變量,但它們不是全局對象的屬性。

如果MS控制檯依賴隱含的window屬性創建來訪問在控制檯中創建的變量,那麼constlet將不起作用。

我不確定Chrome開發工具的內部工作的,但它似乎建立在控制檯執行的代碼一個匿名函數包裝:在匿名1個未被捕獲的錯誤 :

throw new Error; 

VM679: 1:7

(function() { throw new Error; })(); 

VM759:以1個未被捕獲的錯誤 nonymous:1:21 在匿名:1:33

我不確定是否有其他的沙箱會在這裏,我也並不一定能找到大量的文檔資料就可以了。

+0

「*如果MS控制檯依賴隱式窗口屬性創建訪問變量*」 - 爲什麼會這樣? – Bergi

+0

@Bergi IDK它聽起來也很愚蠢。正如我所說,猜測,但太長的評論。 –

+0

我現在發佈了我自己的推測:-) – Bergi

相關問題