Continue不是在循环内,firebox会给出编译器错误,但是chrome可以吗?

时间:2018-11-08 16:38:28

标签: javascript node.js google-chrome

function prototype(){

  for(var i in array){

    // insert prototype2 here
  }
}



function prototype2(){

  continue;

}
 // firefox throws error here

var finalFunction = combineFunctions(prototype, prototype2);

我正在使用函数作为原型来构建最终函数。

某些函数最终将在循环内复制,并且具有continue语句。这些原型功能没有执行,但是Firefox和其他网络浏览器会出错并停止该应用程序。

Chrome和nodeJS都可以。是什么原因呢? 我可以做些什么使Firefox忽略这些原型功能? Firefox是否将采用chrome编译算法?

2 个答案:

答案 0 :(得分:0)

您要在prototype2函数中尝试执行的操作(包含循环继续逻辑)将无法正常工作,因为该函数对存在的循环一无所知。一个小代码示例中出现了错误-后面将进行说明以说明问题。

function continueLoop() {
  continue;
}

for (let i = 0; i < 10; i++) {
  if (i === 3) continueLoop();
  console.log(i);
}

/*
  Console will log:
    0
    1
    2
Uncaught SyntaxError: Illegal continue statement: no surrounding iteration statement
    at <anonymous>
*/

// NOTE:  You might need to paste this into your console to see the logs, this code-snippet environment seems to throw a different error, but Chrome console will give the 'Uncaught syntax error' - but I'm editing this in Safari and I see a different error when I run it in this editor, in a different browser.

无论如何,我不确定您为什么要尝试这样做,但是我不知道为什么它会起作用。

答案 1 :(得分:0)

这是语言规范所说的:

  

如果没有在 IterationStatement 中直接或间接嵌套(但不跨越函数边界)嵌套此产品,则会出现语法错误。

(暂时)某些运行时允许在未调用的函数中使用;它可能会停止与下一个V8更新一起使用,并且就我们所知,即使在某些情况下,它也可能会被捕获。

对于某些特定的编程语言应该做什么有想法和意见是可以的,但是对这些想法采取行动的方法是上语言设计委员会,或者选择其他语言。在2018年末,这里有许多其他语言可以将成熟,强大的JavaScript转换为JavaScript。