我理解自我调用匿名函数如下:
(function () {
//...
})();
并且大多数时候它们用于在框架中创建闭包和抽象变量。但是,我也看到不同网站中的来源声明了匿名函数,但是他们没有调用它们。我很好奇这些是如何使用的。是否在加载脚本时调用它们?请注意,在“源”选项卡中,它们看起来不像.js文件。相反,他们有一个这样的名字:
extensions::utils
或extensions::Event
等
他们看起来像是某种框架/图书馆的一部分?我不确定。例如,extensions::Event
包含此代码:
(function($Object, $Function, privates, cls, superclass) {'use strict';
function Event() {
var privateObj = $Object.create(cls.prototype);
$Function.apply(cls, privateObj, arguments);
privateObj.wrapper = this;
privates(this).impl = privateObj;
};
if (superclass) {
Event.prototype = Object.create(superclass.prototype);
}
return Event;
}) //<-Self invocation missing.
如您所见,这只是声明但未使用。我唯一能想到的是,这个匿名函数实际上是分配给一个名为Event
的变量,是extensions
对象的一部分还是什么?
答案 0 :(得分:0)
由于这些文件的唯一内容是非自调用函数,因此最可能的解释是文件的整个内容通过在末尾附加eval
来获得()
并执行。通过这种方式,我们可以访问匿名函数,而无需将它们分配给变量,即var reference = function () {}
,并且仍然可以在需要时执行它们,而不是在创建它们时执行它们。