两个test1和test2 javascript片段有什么区别?

时间:2017-05-18 08:27:29

标签: javascript

这是两个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的类。必须有一个他们选择顺其自然的理由。毕竟最短的代码更好?

由于

2 个答案:

答案 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包围它,无论在这种情况下是否有必要。