评估和演示在Safari中抛出错误的正确ES6代码
问题描述:
所以我有这个完全合法的一段代码,使用ES6默认参数:评估和演示在Safari中抛出错误的正确ES6代码
const foo = 5;
function test(bar = foo) { return bar };
test();
当Safari的控制台执行它可以正常工作。
然而相同的一段代码,一个eval功能内使用时,像这样:
eval('const foo = 5; function test(bar = foo) { return bar }; test();');
引发以下错误:
ReferenceError: Can't find variable: foo
用的WebPack sourcemaps工作时我已在此绊(它生成的代码就像这样包装在eval中,并且破坏了生成的包。
我想知道为什么这种不一致?
测试在Safari v 10.1.2
答
这似乎是相关的块范围的const
/let
使用一个错误,而事实上,该代码是在全局范围内被评估。
我已经发现了两个工作变通:
1:使用var
:
eval('var foo = 5; function test(bar = foo) { return bar }; test();');
2:使用const
,但封闭内执行。例如,IIFE中的相同代码似乎有效:
eval('(function(){const foo = 5; function test(bar = foo) { return bar }; return test();})()');
似乎在Safari 11中工作,因此它可能只是一个错误。 – pvg
看起来像一个与'const' /'let'关键字相关的错误。似乎在Safari 10中使用'var'工作。 –
@PatrickKunka是的,它可以和var一起工作,好像可能是块范围变量 – Kicu