(function() {})()
和它的特定于jQuery的表亲(function($) {})(jQuery)
总是在Javascript代码中出现。
这些构造是如何工作的,它们解决了什么问题?
很欣赏的例子
发布于 2009-10-29 20:22:50
这是一种用于限制变量作用域的技术;它是防止变量污染全局名称空间的唯一方法。
var bar = 1; // bar is now part of the global namespace
alert(bar);
(function () {
var foo = 1; // foo has function scope
alert(foo);
// code to be executed goes here
})();
发布于 2010-06-25 09:36:45
1)它定义了一个匿名函数并直接执行它。
2)这样做通常是为了不用不需要的代码污染全局名称空间。
3)你需要公开一些方法,里面声明的任何东西都是“私有的”,例如:
MyLib = (function(){
// other private stuff here
return {
init: function(){
}
};
})();
或者,或者:
MyLib = {};
(function({
MyLib.foo = function(){
}
}));
关键是,有很多方法可以使用它,但结果保持不变。
发布于 2009-10-29 02:37:50
它只是一个立即被调用的匿名函数。您可以首先创建函数,然后调用它,并获得相同的效果:
(function(){ ... })();
工作方式为:
temp = function(){ ... };
temp();
您也可以对命名函数执行相同的操作:
function temp() { ... }
temp();
您称之为特定于jQuery的代码只是在其中使用jQuery对象的意义上的代码。它只是一个带有参数的匿名函数,可以立即调用。
您可以在两个步骤中完成相同的操作,并且可以使用您喜欢的任何参数:
temp = function(answer){ ... };
temp(42);
这样做解决的问题是,它为函数中的代码创建了一个闭包。您可以在其中声明变量,而不会污染全局命名空间,从而降低将一个脚本与另一个脚本一起使用时发生冲突的风险。
在jQuery的特定情况下,您可以在兼容模式下使用它,在兼容模式下,它不会将名称$声明为jQuery的别名。通过将jQuery对象发送到闭包中并将参数命名为$,您仍然可以使用与没有兼容模式相同的语法。
https://stackoverflow.com/questions/1639180
复制相似问题