为什么我们在揭示模块模式中使用自执行功能?

Bac*_*tnz 3 javascript jquery revealing-module-pattern

多年来我一直在积极使用揭示模块模式,但我想更深入地了解一些事情.根据我的理解,自动执行功能的潜在好处是无形和自我执行,这两者在这种特定模式中似乎没有必要/利用.我不明白的另一件事是,在下面的场景中可以将函数Init包装在SocialMedia函数()中,即嵌入函数,自执行函数似乎是JS中一个非常独特的构造,isn我们可以将属性值分配给自执行代码块,这有点奇怪吗?

var myObj = {
    prop1, "prop1value",
    SocialMedia: (function () {
        function Init() {

        }
        return  {
            Init: Init
        }
    })()
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*uel 8

为什么我们在揭示模块模式中使用自执行功能?

JavaScript具有一流的功能,并且缺少块范围,因此函数用于引入新的范围.

在下面的场景中,什么可以将函数Init包装在SocialMedia函数()中,即嵌入函数...我们可以将属性值分配给自执行代码块并不奇怪吗?

在JavaScript中,函数只是响应()和new运算符的对象.

与其他对象一样,您可以在定义它时使用它,或将其存储在变量或属性中供以后使用.

自执行函数似乎是JS中一个非常独特的构造

这不是JavaScript独有的.具有第一类函数的所有语言都具有此属性,例如:

  • Lisp的,
  • OCaml的,
  • 斯卡拉
  • 走,
  • C#(通过代表),
  • C(通过fn ptrs),
  • 蟒蛇,
  • Perl(via &),
  • 红宝石,
  • LUA

在最近的语言发展中,一流的功能是常态而不是规则.非静态类型语言只是简单易用,因为类型系统语法没有开销,也没有方差问题.

甚至Java也可能会与Lambdas一起争夺Java 8.

在许多其他语言中,立即调用函数并不是那么有用.大多数其他语言都是块范围的,所以如果你想让你的变量分开,你只需要使用一个{...}块.但是在JavaScript中,var范围限定为最小的包含function或程序,因此functions是引入新范围的最简单方法.

Ruby在块和函数之间做了很少的区分,因此在这方面可以认为类似于JS.