在括号内使用函数的奇怪

时间:2013-08-27 01:32:23

标签: javascript jquery

有人可以向我解释下面的代码是什么,它是如何工作的以及为什么使用它?

我不明白为什么函数在括号内或括号后面的括号中。

(function () {
    //Some javascript code...
}());

谢谢。

编辑/跟进问题:

现在我更好地理解上面的内容,与jQuery一起使用会有什么影响:

        $(document).ready(function () {

            (function () {
                //code here
            }());

        });

3 个答案:

答案 0 :(得分:3)

这是一个自动执行的功能。它创建一个匿名函数并立即执行它。

它可用于多种用途,例如创建新范围。

var x = 10
(function () {
    var x = 5
}())
alert(x) // 10

答案 1 :(得分:3)

这是一个自动执行的匿名函数。

首先是匿名函数:

(function(){
  //Normal code goes here
})

真正有趣的部分是当我们在最后添加这个时发生的事情:

();

这些括号会导致前面括号中包含的所有内容立即执行。

Javascript具有功能级别范围。匿名函数中定义的所有变量和函数都不能用于它之外的代码,有效地使用闭包来密封外部世界。

此设计模式对模块化Javascript非常有用。

您可以在这里阅读更多内容: What is the purpose of a self executing function in javascript?

答案 2 :(得分:0)

@doornob是对的。但是,原始帖子中存在语法错误。它应该是这样的:

(function() {
    // your code goes here
})();

虽然这通常被描述为“自动执行功能”,但更准确的术语是“立即调用功能表达”。我们可以称之为“不确定”。这是一种封闭。

此模式通常扩展为称为模块模式的模式,如下所示:

var myModule = (function() {

    var my = {};

    var privateFoo = 'I am foo. I am a private field!';

    my.publicMethodGetFoo = function() {
        return privateFoo;
    }

    return my;
}) ();

这非常类似于传统OOP语言中的类,如C ++或Java。使用var关键字声明的属性无法在模块外部访问。尽管JavaScript中没有访问修饰符这样的东西,但这些属性对于所有意图和目的都是“私有的”。

请注意,我们创建了一个名为“my”的对象。该对象在模块末尾返回,这意味着它暴露在“外部世界”中。因此,它可以在模块外部访问。因此,我们添加到“我的”的任何字段或方法都将是公开的。