这是两个javascript片段。我无法理解两者之间的不同。它似乎都允许新的实例。
var Test1 = (function () {
function Test1(_x, _y) {
this.x = _x;
this.y = _y; console.log("test1");
}
return Test1;
}());
var Test2 = function () {
function Test2(_x, _y) {
this.x = _x;
this.y = _y; console.log("test2");
}
return Test2;
}();
new Test1(1,2);
new Test2(2,4);
编辑:它看起来和我一样但是,我正在使用TypeScript,它生成类似Type1的类。必须有一个他们选择顺其自然的理由。毕竟最短的代码更好?
由于
答案 0 :(得分:1)
在函数语句周围加上括号会强制它进入表达式上下文,因此它是函数表达式而不是函数声明。
但是,在=
的右侧放置一个函数语句就已经这样做了,所以在这种情况下它完全没有区别。
答案 1 :(得分:1)
没有。在这两种情况下,你都有自动调用功能,但是在情况1中,它被括号包围,实际上什么也没做,因为已经存在IIFE,并且没有更多的隐藏范围。
区别在于这两者之间的区别:
var var1 = 1 + 3;
var var2 = (1 + 3);
谈到IIFE装饰,我建议使用以下语法:
var Test2 = (function () {
function Test2(_x, _y) {
this.x = _x;
this.y = _y; console.log("test2");
}
return Test2;
})();
它也做同样的事情,但它似乎是一种常用且流行的语法。
如果TypeScript生成此类代码,则并不意味着它是出于任何特殊目的而完成的 也许正是TypeScript编译器如何解释上下文范围并默认用parantheses包围它,无论在这种情况下是否有必要。