所以我拥有使用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:找不到变量:foo
我在使用webpack源图(eval-source-map
)时偶然发现了这一点,这些源图生成了包含在eval中的代码,并且它会破坏生成的包。
我想知道为什么会出现这种不一致的情况?
在Safari v 10.1.2中测试
答案 0 :(得分:0)
这似乎是与使用块范围的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();})()');