在JavaScript中使用new运算符声明函数有什么好处?

时间:2015-09-04 06:26:59

标签: javascript

标题说明了一切。

我正在阅读一本书,在 功能 章节中,作者提出 使用new运算符声明函数的优点 即可。

但后来我看到了像

这样的声明
function myFunction(){
}

应用程序中的 经常 ,而不是声明它,

var myFunction = new Function();

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

来自MDN description of Function

  

使用Function构造函数创建的函数对象在解析时   该功能已创建。这比声明a效率低   函数表达式或函数声明和调用   它在你的代码中,因为这些函数用其余的解析   代码。

     

传递给函数的所有参数都被视为。的名称   要创建的函数中的参数的标识符,在   他们通过的顺序。

     

注意:使用Function构造函数创建的函数不会创建   封闭他们的创作背景;他们总是在   全球范围。运行它们时,它们只能访问   他们自己的局部变量和全局变量,而不是范围内的变量   其中调用了Function构造函数。这不同于   使用eval和函数表达式的代码。

因此,从这一点来看,使用new Function(...)时会发现以下差异:

  1. 新函数的代码是一个字符串,在调用new Function(...)时解析,而不是在解析页面时解析。例如,您可以构建一个字符串,然后将其用作函数体。

  2. 这些函数始终在全局范围内创建,不会在创建它们的环境中创建闭包。

  3. 这些函数无法访问父作用域变量。

  4. 您可以动态构建代码,然后将其转换为解析/实时函数 - 有点类似于eval(),但有一些细微差别。

  5. 注意:因为具有new Function(...)构造的函数体必须包含在Javascript字符串中,所以以这种方式编写大多数代码会很麻烦。 new Function(...)通常只应用于需要动态构建函数体的特殊情况(这可能是非常罕见的情况),而不是提前知道代码的地方。