在查看uuid.js的代码时,我注意到整个 api 定义的这种模式。
(function() {/*...*/}).call(this);
javascript 中这种模式的优点是什么?
它只是一个立即调用的函数表达式,具有定义的上下文 ( this
)。普通的 IIFE 将全局对象作为其上下文。
读取您链接到的源文件,在这种情况下(不是双关语),他们this
用来获取对全局对象的显式引用,而不假设它被命名为window
(对于浏览器)或global
(对于 node.js 等) .
(IIFE 是一种常见的构造,用于创建一个新的范围,可以在其中声明变量而不会污染全局名称空间,并且可以立即执行块中的代码)。
这样做的主要优点是您可以在函数内声明任意数量的变量,并且它们不会污染全局范围。
另见:模块模式。