无法评估中断语句
Can't eval break statement
为什么这段代码是:
var myBreak = 'break;';
for(var i=0; i < 5; i++) {
console.log('i is : ' + i);
eval(myBreak);
}
console.log('done !');
触发 :
unlabelled break must be inside loop or switch
Firebug 中的错误消息代替控制台中的返回done !
?
不能eval()
中断语句吗?
提前谢谢你!
编辑:
我现在很困惑。^^
- 为什么会失败?
- 杰克徘徊在那时与评估有它自己的"执行上下文"?
- 如果是,为什么他的例子不起作用?
eval 解析/评估 JavaScript 解释器的新实例中的代码。代码最终在原始解释器代码的上下文中执行,但代码必须能够在没有外部上下文的情况下执行,因为新实例对它视而不见。
因此,alert(eval(this.constructor.name))
将为您提供正确的对象上下文名称(全局窗口中的窗口)。
但是这些会失败,因为实例在被单独的解释器评估之前不会"看到"彼此的代码,在这个阶段,一个部分失败而没有另一个:
-
try{}eval('catch(){}');
-
for(;;){ eval('break;'); }
-
myLoop: eval('for(;;){ break myLoop; }');
简短版本:代码将按预期工作,但评估中的任何内容都必须是您可以在任何其他上下文中单独触发的东西。
因此,基本上,在考虑值、范围和对象上下文之前,先进行初步解析/错误检查。完成所有操作后,代码可以协同工作,并检查是否正在调用尚未定义的 var。在此之前,新的解释器只有在检查错误时才能看到评估中的内容。在中断的情况下,它看不到的是围绕它的循环或开关。
循环标签在这个早期解析/评估阶段被考虑,而像var存在和函数标签这样的东西似乎在以后被检查。
eval
代码在自己的执行上下文中执行;基本上,这意味着当break;
执行时,它不知道它正在for
循环中执行。
如果您标记break
,它应该可以工作:
var myBreak = 'break myLoop;';
myLoop:
for(var i=0; i < 5; i++) {
console.log('i is : ' + i);
eval(myBreak);
}
console.log('done !');
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 自动修复”;语句前缺少分号“;
- 高亮显示与数组字符串一起使用时文本插件中断
- 如何在 API 调用后和 if 语句中启用提交按钮
- 当使用return语句时,循环不会中断
- 无法评估中断语句
- return语句在JavaScript中使用而不中断函数
- 循环不应在遇到无效语句时中断
- 我的“if”语句中包含中断的错误(wrox ch 3 练习 4)
- 中断语句仅删除第二个循环
- if语句中的中断语句,该语句包含在嵌套的for循环中
- 中断不适用于我的开关语句
- 中断语句不会中断循环
- 在布尔语句 [V8] 中使用继续/中断
- switch/if语句中断了for循环
- 为什么添加分号有时会中断if语句
- 如何在javascript中中断多个if语句
- js的延迟计算,鼠标拖动的例子中断没有log()语句
- 使用“下一个中断”进行调试时如何排除 setTimeout 或 setInterval 类型语句