【问题标题】:what is the difference in two test1 and test2 javascript snippets? [duplicate]两个 test1 和 test2 javascript 代码段有什么区别? [复制]
【发布时间】:2017-10-17 22:54:32
【问题描述】:

这里有两个 javascript sn-ps。我无法理解两者之间的区别。似乎两者都允许更新实例。

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 这样的类。他们选择这样做一定是有原因的。毕竟最短的代码更好?

谢谢

【问题讨论】:

    标签: javascript


    【解决方案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 编译器如何解释上下文范围并在默认情况下用括号括起来的方式,无论在这种情况下是否有必要。

    【讨论】:

    • "建议使用以下语法……和事实上的标准。" - 你是怎么收集到的?
    • @Bergi 这是我自己的经验 :) 我很少看到其他用法。只是为了用证明来支持我的话,我找到了popular question about IIFEs at SO,95% 的答案都在使用这种方法。我将编辑我的答案,不会使用这个过于自信的句子。谢谢指正:)
    • 真的是purely opinion-based
    【解决方案2】:

    在函数语句周围加上括号会强制它进入表达式上下文,因此它是函数表达式而不是函数声明。

    但是,在 = 的右侧放置一个函数语句已经这样做了,所以在这种情况下它根本没有区别。

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多