【发布时间】:2020-06-03 10:54:43
【问题描述】:
为什么会报错?
!function() {
var a = 3;
setTimeout('console.log(a)');
}()
如果使用函数而不是字符串,它会起作用。
它也适用于 eval:
!function() {
var a = 3;
eval('console.log(a)');
}()
这个问题是关于理论的。无需修复。
问题在于范围。我不明白为什么范围会丢失。更好 - 来自解释它的来源(例如 Mozilla 网站)的一些句子。
【问题讨论】:
-
因为不能执行字符串?
-
可以,但由于某种原因不在本地范围内。
-
@Argee 字符串是
eval-ed -
好吧,如果它是
eval-ed,那么也许这会有所帮助:stackoverflow.com/questions/9781285/… ... 显然 eval 通常使用全局范围,但您在不同的范围内执行它
标签: javascript