为什么在 javascript 中会有一个自调用的匿名函数包围 jQuery onReady 回调?

Why in javascript would an self-called anonymous function surround a jQuery onReady callback?

我目前正在玩 playframework。 我从使用 Coffeescript 的教程开始。 CoffeeScript 被转换为 javascript,这个特定的例子,javascript 方法需要在页面加载时动态生成一个列表。

生成的 javascript 使用了我以前见过的模式,我读过该模式可用于限定变量或函数的范围。也就是说,它将所有内容都封装在一个匿名函数中。

但是,在该匿名函数中是 window.isReady 的回调,采用 JQuery 风格。

(function() {
  $(function() {
      // the code within the callback goes here!
  });

}).call(this);

这仅仅是因为由一组程序规则生成的结果,还是有理由在匿名函数中进行回调?确定 JQuery onReady 回调范围的原因?

当然,该功能无需被自调用的匿名函数包围即可运行。那么,有什么好处吗?

由于该函数界定了一个范围,因此您希望将此作为防止污染全局命名空间的最佳做法。

在这个简单的示例中,它可能没有必要,因为您不保存任何变量,但您可以拥有私有函数或其他函数(而不是全局函数)

像这样:

(function() {

  var a = 5;

  var f = function() { ... }


  $(function() {
      // the code within the callback goes here!
      f();
      console.log(a);
  });

}).call(this);

它被称为 IIFE(立即调用的函数表达式)。好吧……至少有点味道。您通常不会将 .call 用于 IIFE,但它会做同样的事情。它在这种情况下的目的主要是防止全局范围的污染

了解他们 here