首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >(function() {})()结构是如何工作的,人们为什么要使用它?

(function() {})()结构是如何工作的,人们为什么要使用它?
EN

Stack Overflow用户
提问于 2009-10-29 02:29:01
回答 10查看 6.1K关注 0票数 81

(function() {})()和它的特定于jQuery的表亲(function($) {})(jQuery)总是在Javascript代码中出现。

这些构造是如何工作的,它们解决了什么问题?

很欣赏的例子

EN

回答 10

Stack Overflow用户

发布于 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
})();
票数 41
EN

Stack Overflow用户

发布于 2010-06-25 09:36:45

1)它定义了一个匿名函数并直接执行它。

2)这样做通常是为了不用不需要的代码污染全局名称空间。

3)你需要公开一些方法,里面声明的任何东西都是“私有的”,例如:

MyLib = (function(){
    // other private stuff here
    return {
        init: function(){
        }
    };

})();

或者,或者:

MyLib = {};
(function({
    MyLib.foo = function(){
    }
}));

关键是,有很多方法可以使用它,但结果保持不变。

票数 19
EN

Stack Overflow用户

发布于 2009-10-29 02:37:50

它只是一个立即被调用的匿名函数。您可以首先创建函数,然后调用它,并获得相同的效果:

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

工作方式为:

temp = function(){ ... };
temp();

您也可以对命名函数执行相同的操作:

function temp() { ... }
temp();

您称之为特定于jQuery的代码只是在其中使用jQuery对象的意义上的代码。它只是一个带有参数的匿名函数,可以立即调用。

您可以在两个步骤中完成相同的操作,并且可以使用您喜欢的任何参数:

temp = function(answer){ ... };
temp(42);

这样做解决的问题是,它为函数中的代码创建了一个闭包。您可以在其中声明变量,而不会污染全局命名空间,从而降低将一个脚本与另一个脚本一起使用时发生冲突的风险。

在jQuery的特定情况下,您可以在兼容模式下使用它,在兼容模式下,它不会将名称$声明为jQuery的别名。通过将jQuery对象发送到闭包中并将参数命名为$,您仍然可以使用与没有兼容模式相同的语法。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1639180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档