我目前正在玩playframework。 我开始使用使用Coffeescript的教程。 CoffeeScript转换为javascript,这个特殊的例子,javascript方法需要在加载页面时动态生成列表。
生成的javascript使用了我之前见过的模式,我读过的模式可以用于范围变量或函数。也就是说,它包含了匿名函数中的所有内容。
然而,在该匿名函数中,是以jQuery样式的window.isReady回调。
(function() {
$(function() {
// the code within the callback goes here!
});
}).call(this);
这是因为这是由一组编程规则生成的,还是有理由在匿名函数内部进行回调? JQuery onReady回调范围的原因是什么?
当然,该功能可以在不被自称匿名函数包围的情况下工作。那么,有什么好处吗?
答案 0 :(得分:1)
由于函数会分隔范围,因此您希望将此作为防止污染全局命名空间的最佳做法。
在这个简单的例子中,可能没有必要,因为你没有保存任何变量,但你可能有私有或其他功能(而不是全局)
像这样:
(function() {
var a = 5;
var f = function() { ... }
$(function() {
// the code within the callback goes here!
f();
console.log(a);
});
}).call(this);
答案 1 :(得分:1)
它被称为IIFE(立即调用函数表达式)。嗯...至少它的味道。您通常不会将.call
用于IIFE,但它会执行相同的操作。在这种情况下,其目的主要是防止污染全球范围。
了解他们here。