在如此多的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...