当前位置:网站首页>(function(global,factory){
(function(global,factory){
2022-07-28 13:28:00 【前端切图仔Zz】
在如此多的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根本上就是当从函数外部引用时指向全局对象(浏览器的window和node.js没命名),factory是创建库对象的函数,根本上factory是vue,jq等三方库的完成。
用这样的方式来写这个结构,没有创建任何不必要的全局变量和函数,因此避免了污染全局区域并且避免了与其他库变量或函数名的冲突。
至于为什么要把this分派给global,这是因为window是一个完全没有保护的全局变量(这是为什么node.js没有给它起名字)并且任何第三放库都可以重写或者修改它。如果你在使用不知名的第三方库时想要浏览器的原始全局对象,你需要使用this这个小技巧。
边栏推荐
- PowerDesigner creates a database model (conceptual model example)
- Jmeter安装教程及登录增加token
- [lvgl events] Application of events on different components (I)
- Redis sentinel mechanism
- 这3款在线PS工具,得试试
- 7.27 simulation summary
- JMeter installation tutorial and login add token
- How to effectively conduct the review meeting (Part 1)?
- Collaborative office tools: Online whiteboard is in its infancy, and online design has become a red sea
- Diablo 4 ps4/ps5 beta has been added to the Playstation database
猜你喜欢

83. (cesium home) how the cesium example works

Metersphere -- Open Source continuous testing platform

阿里、京东、抖音:把云推向产业心脏

在centos中安装mysql5.7.36

天气这么热太阳能发电不得起飞喽啊?喽啊个头……

HCIP第十一天
![[server data recovery] HP StorageWorks series server RAID5 offline data recovery of two disks](/img/23/4d07adcb5fb2c3b4c5090dacd02c89.jpg)
[server data recovery] HP StorageWorks series server RAID5 offline data recovery of two disks

Diablo 4 ps4/ps5 beta has been added to the Playstation database

HCIP第十天

修订版 | 目标检测:速度和准确性比较(Faster R-CNN,R-FCN,SSD,FPN,RetinaNet和YOLOv3)...
随机推荐
Jmeter安装教程及登录增加token
【LeetCode】1331. 数组序号转换
开源项目丨Taier1.2版本发布,新增工作流、租户绑定简化等多项功能
【Utils】JsonUtil
什么是自旋锁 自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。 /** * 为什么用自旋锁:多个线程对同一个变量
[lvgl events] event code
Custom Configuration Sections
用友BIP CRM新品发布,赋能大中型企业营销增长
Leetcode 1331. array sequence number conversion
QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样
IP黑白名单
2022年熔化焊接与热切割考题及在线模拟考试
Multithreading and high concurrency (III) -- source code analysis AQS principle
这3款在线PS工具,得试试
如何有效进行回顾会议(上)?
Istio IV fault injection and link tracking
Understanding of "image denoising using an improved generic advantageous network with Wasserstein distance"
Master several common sorting - Select Sorting
Nport serial server configuration website (whether the serial server is from network port to serial port)
创建线程池的四种方式