非自调用、匿名、javascript函数的意义何在

What is the point of non self-invoking, anonymous, javascript functions?

本文关键字:javascript 调用 匿名 函数      更新时间:2023-09-26

我了解自调用匿名函数,比如:

(function () {
    //...
})();

大多数时候,它们用于创建闭包和抽象框架中的变量。然而,我也在不同的站点中看到过声明匿名函数但不调用它们的源代码。我很好奇这些是怎么用的。加载脚本时是否调用它们?请注意,在源选项卡中,它们看起来不像.js文件。相反,他们有一个这样的名字:

extensions::utilsextensions::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对象或其他对象的一部分?

由于这些文件的唯一内容是非自调用函数,因此最可能的解释是,文件的整个内容通过在末尾添加()来执行eval。通过这种方式,我们可以访问匿名函数,而无需将它们分配给变量,即:var reference = function () {},并在需要时执行它们,而不是在创建过程中执行它们。

编辑:这些"文件"似乎是谷歌chrome使用的东西。我在不相关的网站上找到了它们。当我从firefox打开同一个网站时,我也找不到它们。