括号中的代码块在JavaScript / jQuery中意味着什么?

What does a block of code in parentheses mean in JavaScript/jQuery?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What does (function($) {})(jQuery); mean?

我见过很多jquery代码使用以下语法,但我不太理解它的含义。它出现在这个答案和这个关于代码组织的问题的答案中。这两个都是关于名称间距的,所以我猜这就是它的成就。

1
2
3
4
5
6
7
var foo = (function () {
    var someVar;

    function someFunc() {
        return true;
    }
})();

这是用于名称间距吗?它是如何工作的?有时会有一个名称(名称空间?)在最后一组括号中,有时不是。这两者有什么区别?


这是一()WRAP的匿名函数的函数声明一个函数可以被表达,然后立即与()invoked是追随的表达。

本案例中,外()真的不是必要的,它是从一个转向var foo =表达。所以,价值fooundefined自invocation函数不返回任何。

它可以用于创建一个新变量的范围,因为一个函数是唯一的方式来完成,在JavaScript。(JavaScript没有块的范围。)

因此,someVar变量是不可以访问的范围外。有可能是当它是理想的时代,使它可以在一个可控的方式。这样做,你可以看出这是一个函数someVar参考范围。然后invocation出口后,其执行上下文的功能,要想保持变形,和someVar可用传递函数无论你出人提供。

这是一closure被创建。

让我们说你的价值传递到invocation A和它的someVar域名。然后你可以return函数跳出invocation到foo变量。如果这是你someVar函数返回引用,然后你可以使用这样的功能得到它的价值。

1
2
3
4
5
6
7
8
9
10
11
12
13
var foo = (function ( str ) {
    var someVar = str;
/*
    function someFunc() {
        return true;
    }
*/

    return function() {
        alert( someVar );
    };
})( 'somevalue' );

foo(); // alerts 'somevalue'

你可以看到,现在由函数参考someVarfoo仍然可以访问。

让我们说你改变了它的功能是返回到fooCAN accept的论据,这将myVar更新的价值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var foo = (function ( str ) {
    var someVar = str;
/*
    function someFunc() {
        return true;
    }
*/

    return function( n ) {
        if( n ) {
            someVar = n;
        } else {
            alert( someVar );
        }
    };
})( 'somevalue' );

foo(); // alerts 'somevalue'

foo( 'newvalue' ); // give it a new value

foo(); // alerts 'newvalue'

现在你可以看到,它是真的,foo访问函数的变量,它是能够改变其新的价值和参考价值,它以前的设置。


环绕在周围的括号在匿名函数,为了使它变的可以直接通过增加后的参数信息。

1
2
3
(function(param) {
    // do stuff
})(param);

最后一位不是一个命名空间,只是一个参数。你有可能在AS:jQuery的湖泊……

1
2
3
(function($) {
    $('.something').addClass('.other');
})(jQuery);

我期待通过jQuery对象中的一个功能,使$jQuery对象中的变量的范围内的匿名函数。使用速记$人样,但它可以导致冲突与其他图书馆。本技术removes冲突的可能性完全合格的A通过传递对象和jQueryoverwriting变量的范围是在$)函数,所以可以用快捷键。