在那么多Javascript库里,我看到global和factory都是函数参数,这是为什么呢?答:这是UMD模式,你可以通过下图清楚地看到这段代码在你的库中做了什么:┌──────────────────────────────────────────────────────┐┌────────────────────┐│▼▼││(function(global,factory){││││││/*为清楚起见删除*/││┌────────────────────────────────┘│││}(this,function(){'usestrict';││└───────┘/**/})所以这基本上是一个立即数执行函数,如果你把匿名函数重写成命名函数你可以更清楚地看到这段代码的结构。//renamefunction(){'usestrict'...functionVue(){'usestrict';/**/}//重命名function(global,factory)...functionUMD(global,factory){/*为清楚起见删除*/}UMD(this,Vue);global基本上是工厂的全局对象,当它从函数外部引用(window在浏览器和node.js中没有命名),工厂是创建库对象的函数,工厂基本都是vue,complejq等三方库的重用。该构造的编写方式使其不会创建任何不必要的全局变量和函数,从而避免污染全局区域并避免与其他库变量或函数名称发生冲突。至于为什么把它赋值给global,是因为window是一个完全不受保护的全局变量(这也是node.js不给它命名的原因),任何第三方库都可以覆盖或修改它。如果在使用未知的第三方库时想要浏览器原有的全局对象,就需要用到这个小技巧了。学习自:https://stackoverflow.com/que...
