标题说明了一切。
我正在阅读一本书,在 功能 章节中,作者提出 使用new运算符声明函数的优点 即可。
但后来我看到了像
这样的声明function myFunction(){
}
应用程序中的 经常 ,而不是声明它,
var myFunction = new Function();
有什么建议吗?
答案 0 :(得分:3)
来自MDN description of Function
:
使用Function构造函数创建的函数对象在解析时 该功能已创建。这比声明a效率低 函数表达式或函数声明和调用 它在你的代码中,因为这些函数用其余的解析 代码。
传递给函数的所有参数都被视为。的名称 要创建的函数中的参数的标识符,在 他们通过的顺序。
注意:使用Function构造函数创建的函数不会创建 封闭他们的创作背景;他们总是在 全球范围。运行它们时,它们只能访问 他们自己的局部变量和全局变量,而不是范围内的变量 其中调用了Function构造函数。这不同于 使用eval和函数表达式的代码。
因此,从这一点来看,使用new Function(...)
时会发现以下差异:
新函数的代码是一个字符串,在调用new Function(...)
时解析,而不是在解析页面时解析。例如,您可以构建一个字符串,然后将其用作函数体。
这些函数始终在全局范围内创建,不会在创建它们的环境中创建闭包。
这些函数无法访问父作用域变量。
您可以动态构建代码,然后将其转换为解析/实时函数 - 有点类似于eval()
,但有一些细微差别。
注意:因为具有new Function(...)
构造的函数体必须包含在Javascript字符串中,所以以这种方式编写大多数代码会很麻烦。 new Function(...)
通常只应用于需要动态构建函数体的特殊情况(这可能是非常罕见的情况),而不是提前知道代码的地方。