0

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

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

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

谢谢你。

编辑/跟进问题:

现在我更好地理解了上面做了什么,当它与 jQuery 一起使用时会有什么效果:

        $(document).ready(function () {

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

        });
4

3 回答 3

3

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

首先是匿名函数:

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

真正有趣的部分是当我们在最后添加它时会发生什么:

();

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

Javascript 具有函数级别的作用域。匿名函数中定义的所有变量和函数对其外部的代码均不可用,有效地使用闭包将自己与外界隔离。

这种设计模式对于模块化 Javascript 很有用。

您可以在这里阅读更多内容: javascript 中自执行函数的目的是什么?

于 2013-08-27T01:37:19.563 回答
3

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

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

var x = 10
(function () {
    var x = 5
}())
alert(x) // 10
于 2013-08-27T01:33:20.947 回答
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;
}) ();

这很像 C++ 或 Java 等传统 OOP 语言中的类。使用 var 关键字声明的属性不能在模块外部访问。尽管 JavaScript 中没有访问修饰符之类的东西,但这些属性出于所有意图和目的都是“私有的”。

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

于 2013-08-27T01:55:22.477 回答