什么'匿名函数包装器和javascript中的新函数包装器之间的区别

what's the different between anonymouse function wrapper and the new function wrapper in javascript?

本文关键字:函数 包装 新函数 区别 之间 什么 javascript      更新时间:2023-09-26

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

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

它起作用了,但与(function(){})()

有什么不同

有两件事不同:

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

  2. 它改变了函数中this的值:

    • 在您的new示例中,this指的是#1 中的对象

    • 在第二个示例(IIFE)中,this要么是undefined(在严格模式下),要么是对全局对象的引用(在松散模式下)

如果您不打算使用new创建的对象,那么new表单就没有意义;这只是一种风格选择。

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