为什么新功能(...)的内容没有在这些插图中编译?

时间:2015-09-04 11:25:18

标签: javascript

我碰巧经历了article

考虑一下代码段:

function createMyFunction(myOperator)
{
  return new Function("a", "b", "return a" + myOperator + "b;");
}

var add=createMyFunction("+");                // creates "add" function
var subtract=createMyFunction("-");           // creates "subtract" function
var multiply=createMyFunction("*");           // created "multiply" function

// test the functions
alert("result of add="+add(10,2));            // result is 12
alert("result of substract="+subtract(10,2)); // result is 8
alert("result of multiply="+multiply(10,2));  // result is 20
alert(add);

这个有趣的示例在 运行时 期间通过传递一个参数来创建3个不同的函数,该参数将用于 来构建新的函数 < /强>

作者提到

  

由于编译器无法知道最终代码的外观   比如,新功能(...)的内容未编译

我只是没有得到它。有人可以通过扩展一点来详细说明吗?

1 个答案:

答案 0 :(得分:1)

作者不想说函数没有编译 - 因为我们正在运行它,必须是。

他试图表达height的代码在调用new Function("…")时被解析和编译 - 与使用函数表达式或声明创建的函数形成对比,这些函数是在您编译时编译的。脚本被解析。

他继续说道时表达了自己的观点:

  

...并且可能比声明函数的其他方式慢。

所以你应该避免一次又一次地调用new Function(),它会比在闭包中创建函数表达式慢 - 它们只编译一次。根据JS引擎的复杂程度,差异可能很大。