2015-09-04 89 views
1

标题说明了一切。在JavaScript中使用new运算符声明函数有什么好处?

我正在读一本书,并在功能的章节中,作者提出的是有使用new运算符声明功能的优点。

但后来我看到了类似的声明

function myFunction(){ 
} 

经常的应用,只是声明了像,

var myFunction = new Function(); 

有什么建议?

+0

我认为这是这个副本http://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript –

+2

@MuhammadUsman - 不,这个问题是关于'new Function( ...)'创建一个新的函数对象,而不是创建一个新的常规对象的'New SomeConstructor()'。 – jfriend00

回答

3

MDN description of Function: 函数创建时与功能构造函数创建

函数对象进行解析。这比使用函数表达式或函数声明声明 函数的效率要低,并且在代码中调用 ,因为这些函数会与代码的其余 一起解析。

传递给该函数的所有参数均被视为要创建的函数中参数的 标识符的名称,其传递顺序为 。

注意:使用Function构造函数创建的函数不会创建 关闭其创建上下文;它们始终在全球范围内创建。运行它们时,它们只能访问 自己的局部变量和全局变量,而不能访问调用Function构造函数的范围 。这与 不同,它使用eval和函数表达式的代码。

所以,从这个,您使用new Function(...)时看到以下区别:

  1. 新函数的代码是一个字符串被解析时new Function(...)被调用,而不是当页面解析。例如,你可以建立一个字符串,然后用它作为你的函数体。

  2. 这些功能始终在全球范围内创建和他们不被创建的环境中创建关闭。

  3. 这些功能不能访问父作用域的变量。

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


注:因为函数体与new Function(...)结构必须被包含在一个JavaScript字符串,它的杂乱这样写的大多数代码。 new Function(...)一般只适用于需要快速构建函数体的特殊情况(这可能是非常罕见的情况),而不是您提前知道代码的位置。

+0

Upvoted,但在同一章节的底部,作者建议“使用new操作符声明函数的优点是脚本可以在文档加载后创建函数。”我想我没有得到它。你能否详细说明一下。 –

+1

@ShirgillAnsari - 这是我的观点#1和#4以上。这是非常罕见的,当这是需要的。我见过的唯一情况是用户提供的代码被动态添加到页面中。我知道没有理由将此构造用于您自己的代码。 – jfriend00

相关问题