为什么在 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。
我目前正在玩 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。