我碰巧经历了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个不同的函数,该参数将用于 来构建新的函数 < /强>
作者提到
由于编译器无法知道最终代码的外观 比如,新功能(...)的内容未编译
我只是没有得到它。有人可以通过扩展一点来详细说明吗?
答案 0 :(得分:1)
作者不想说函数没有编译 - 因为我们正在运行它,必须是。
他试图表达height
的代码在调用new Function("…")
时被解析和编译 - 与使用函数表达式或声明创建的函数形成对比,这些函数是在您编译时编译的。脚本被解析。
他继续说道时表达了自己的观点:
...并且可能比声明函数的其他方式慢。
所以你应该避免一次又一次地调用new Function()
,它会比在闭包中创建函数表达式慢 - 它们只编译一次。根据JS引擎的复杂程度,差异可能很大。