anonymouse函数包装器和javascript中的新函数包装器有什么不同?

时间:2015-11-07 03:27:02

标签: javascript function

我看到有些人将代码包装在新函数(){}中,如

new function(){
   var app= angular.module('app',[])
   app.controller('ctrl',function(){});
};

它有效,但与(function(){})()

有什么不同

2 个答案:

答案 0 :(得分:4)

有两件事是不同的:

  1. 它会创建一个对象,在您的示例中,该对象不用于任何内容,并且在函数返回后立即可用于垃圾回收。

  2. 它会更改函数中的this值:

    • new示例中,this引用#1

    • 中的对象
    • 在您的第二个示例(IIFE)中,thisundefined(在严格模式下)或对全局对象的引用(在松散模式下)

  3. 如果您不打算使用new创建的对象,则new形式没有意义;这只是一种风格选择。

答案 1 :(得分:2)

new会返回一个实例,它可以作为一个构造。 在您声明它时,(function(){})();只会运行一次函数,这也称为IIFE - 立即调用函数表达式。

但是new的示例不正确,因为您需要将数据分配给this,以便将某些内容存储在您正在构建的实例中。例如:

var obj = new function(){
  this.app= angular.module('app',[])
  this.app.controller('ctrl',function(){});
};

// Now you can use obj.app