我正在运行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