关于javascript:为什么function-global-factory-在如此多的前端库中有应用

46次阅读

共计 806 个字符,预计需要花费 3 分钟才能阅读完成。

在如此多的 Javascript 库中,我看到 global、factory 作为函数的参数,这是为什么呢?
答:
这是 UMD 模式,你能够很清晰的通过下图看到看到这段代码在你的库中做了什么:

 ┌──────────────────┐       ┌──────────────────┐
    │                  ▼       ▼                  │
    │    (function (global, factory) {            │
    │                                             │
    │                                             │
    │        /* deleted for clarity */            │
    │                 ┌───────────────────────────┘
    │                 │
    │    }(this, function () { 'use strict';
    │       │
    └───────┘
             /* */

         })

所以这基本上是一个立刻执行函数,如果你把匿名函数改写为有名字的函数你能够更清晰的看到这段代码的构造。

// rename function () { 'use strict' ...
function Vue () { 'use strict';
    /* */
}

// rename function (global, factory) ...
function UMD (global, factory) {/* deleted for clarity */}

UMD(this, Vue);

global 基本上就是当从函数内部援用时裸露 factory 的全局对象(window 在浏览器和 node.js 没命名),factory 是创立库对象的函数,基本上 factory 是 vue,jq 等三方库的实现。
用这样的形式来写这个建构,没有创立任何不必要的全局变量和函数,因而防止了净化全局区域并且防止了与其余库变量或函数名的抵触。
至于为什么要把 this 分派给 global,这是因为 window 是一个齐全没有爱护的全局变量(这是为什么 node.js 没有给它起名字)并且任何第三放库都能够重写或者批改它。如果你在应用不出名的第三方库时想要浏览器的原始全局对象,你须要应用 this 这个小技巧。

借鉴于:
https://stackoverflow.com/que…

正文完
 0