(function(global) {
global.socket = socket;
})(window);
(function(global) {
global.socket = socket;
})(window);
`(function(...){...})(...)` 是 JavaScript 的立即执行函数表达式(IIFE).
上面的例子很简单,但是函数体内的代码有可能在一系列的调用中产生把变量污染到全局作用域的行为,使用 IIFE 包裹一层规避了潜在的这种可能。
由于 JavaScript 的运行环境多种多样,为了写一个在各种环境下都能制造一个统一名字的全局的 `global` 对象,需要做很多判断来打补丁,TC39 有一个专门的提案解决这个问题,globalThis: https://github.com/tc39/proposal-global