我正在运行Edge / 15.15063。 'Can I Use' says const should work.
运行:
const x = 'woo'
然后:
console.log(x)
返回
'x' is undefined
截图:
为什么不能使用?
答案 0 :(得分:2)
我怀疑Edge控制台在其封面like other implementations did下使用with
语句。这可以解释var
和even function
declarations在全局范围内被提升,但let
和const
将被锁定在块范围内:
with (…) {
const x = 'woo'
}
// next input:
with (…) {
console.log(x) // obviously undeclared
}
尝试在单线评估中以多线模式输入 - 他们应该在那里工作。
但是你也可能想要提交一个错误,因为控制台确实希望感觉就像评估全局范围内的东西一样。
答案 1 :(得分:1)
我想我认为这一点,但这是一个猜测作为答案。虽然评论太长了。
我认为当以同样的方式在顶级范围中使用const
和let
do not create隐式全局变量时发生的事情{{1} }。虽然使用var
和const
创建的顶级变量是全局变量,但它们不是全局let
对象的属性。
如果MS控制台依赖于隐式window
属性创建来访问在控制台中创建的变量,那么window
和const
将无效。
我不确定Chrome Dev Tools的内部工作方式,但似乎为控制台中执行的代码创建了一个匿名函数包装器:
let
VM679:1未捕获错误 匿名:1:7
throw new Error;
VM759:1未捕获错误 匿名:1:21 匿名:1:33
我不确定此处是否还有其他沙盒,我不一定能找到很多关于它的文档。