闭幕式有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

在JavaScript中有两种流行的封闭样式。第一个我称之为匿名构造函数

new function() { 
  var code...
}

内联执行的功能

(function() {
  var code...
})();

这两者之间的行为有差异吗?一个比另一个“更好”吗?

提问于
用户回答回答于

两种情况都会执行函数,唯一真正的区别是表达式的返回值可能是什么,以及“this”的值将在函数内部。

基本上的行为

new expression

实际上等同于

var tempObject = {};
var result = expression.call(tempObject);
if (result is not an object)
    result = tempObject;

尽管当然tempObject和结果是暂时值,你永远无法看到(它们是解释器中的实现细节),并且没有JS机制来执行“不是对象”检查。

一般来说,由于需要为构造函数创建此对象,因此“new function(){..}”方法会变慢。

也就是说,这应该不是一个真正的区别,因为对象分配不是很慢,并且您不应该在热代码中使用此类代码(由于创建函数对象和关联闭包的成本)。

用户回答回答于

第一个也在执行。将其与命名构造函数进行比较:

function Blah() {
    alert('blah');
}
new Bla();

这实际上也是执行代码。匿名构造函数也是如此......

扫码关注云+社区