2017-04-03 73 views
2

當我嘗試使用VAR定義一個變量,一切工作。定義常量使用可變的eval()

但將其定義爲const無法按預期工作和變量是不確定的。

window.eval("var v = 5;"); 
 
document.body.innerHTML += window.v === undefined; 
 

 
window.eval("const l = 5;"); 
 
document.body.innerHTML += window.l === undefined;

我已經測試了Chrome和Node.js的我錯過了什麼嗎?

預先感謝您!

回答

5

這是因爲const默認啓用的嚴格模式。看到當你打開strict模式。這兩個例子中明確發生了什麼:

window.eval("'use strict'; var v = 5;"); 
 
document.body.innerHTML += window.v === undefined; 
 

 
window.eval("'use strict'; const l = 5;"); 
 
document.body.innerHTML += window.l === undefined;

關於嚴格模式的更多信息,請參閱:

特別是這部分:

其次,EVAL的嚴格模式代碼不引入新的變量到周圍的範圍。在正常的代碼中,eval(「var x;」)在周圍函數或全局範圍中引入了一個變量x。這意味着,在一般情況下,在一個函數包含調用EVAL每名指的不是一個參數或局部變量必須在運行時被映射到一個特定的定義(因爲EVAL可能已經引入了一個新的變量,將隱藏外部變量)。 在嚴格模式的eval僅被評估的代碼創建變量,因此EVAL可以在不影響的名稱是否是指外變量或一些局部變量 [添加強調]

參見本文:

+0

哦,這是有道理的。謝謝!我會在幾分鐘內接受你的回答:) – jooas