奇怪的JavaScript语法如下:(function(){// code})();?

时间:2009-08-27 12:47:57

标签: javascript function

以下JavaScript是什么意思?为什么函数嵌入在()?

(function() {
    var b = 3;
    a += b;
}) ();

8 个答案:

答案 0 :(得分:13)

它的功能相当于执行以下操作:

var myFunc = function(){
    var b = 3;
    a += b;
};

myFunc();

它周围有括号(和尾随),以便立即调用该函数。正如其他人所说,这个概念被称为匿名函数

答案 1 :(得分:5)

这是一个匿名函数,它在创建后立即触发。

答案 2 :(得分:4)

它是一个匿名函数。

  

匿名函数是函数   在运行时动态声明   不必给出名字。

     

使用声明匿名函数   函数运算符。你可以使用   函数运算符创建一个新的   功能放在哪里有效   表达。比如你可以   声明一个新函数作为参数   到函数调用或分配一个   另一个物体的财产。

进一步阅读

Javascript anonymous functions

  

匿名函数可以帮助制作代码   在声明函数时更简洁   只会在一个地方使用。   而不是必须声明   功能,然后使用它,你可以做到   一步到位。特别是   对于声明事件等内容非常有用   处理程序和分配方法   对象。

例如,如果我们要创建构造函数,我们需要声明对象的方法,然后将它们分配给对象的属性,以便可以在对象外部调用它们。可以声明该函数,然后将其作为单独的步骤分配给变量:

function Pet(name, species, hello)
{    
          this.name = name;    
          this.species = species;    
          this.hello = hello;

          function sayHello()    
          {    
              alert(this.hello);    
          }

          this.sayHello = sayHello;    
      }

但这样做更方便,更简洁:一步到位:

 function Pet2(name, species, hello)
 {
      this.name = name;    
      this.species = species;    
      this.hello = hello;

      this.sayHello = function()      
      {     
          alert(this.hello);    
      }    
  }

答案 3 :(得分:2)

你写的是一个立即调用的匿名函数。 这样做的原因是使用私有变量。如果不是你的代码,那就是:

var b = 3;
a += b;

b将是全局变量。因此,如果您需要全局代码私有变量,那就是这样做的方法。

答案 4 :(得分:1)

这是在适当位置执行的匿名函数。最好的用法是设置一些上下文或环境设置或对加载产生一些副作用。

Ajax Toolkits(如JQuery,Dojo等)大量使用它来执行加载时间魔术并解决许多浏览器怪癖和缺点。

答案 5 :(得分:1)

这是一个匿名函数,在创建后直接调用,然后扔掉。

它在括号内以防止语法错误。如果没有括号,关键字function后面必须跟一个标识符。

你也可以这样做把函数放在变量中,然后调用它:

var x = function() {
   var b = 3;
   a += b;
}
x();

请注意,function关键字不是第一个时,不需要括号。

答案 6 :(得分:1)

javascript中的函数是对象,也可以用作对象。例如,你可以这样做:

var a = function() {alert("done");};
a();

这通常用在各种函数中,你必须在里面传递一些逻辑。例如,数组的“sort”函数需要在内部传递函数对象以确定如何对数组进行排序:

var a = [{id: 15, name: 'test'},
         {id: 11, name: 'asd'},
         {id: 88, name: 'qweqwe'}];
a.sort(function(a,b) {
    if (a.id > b.id) return 1; //Put a after b
    if (a.id < b.id) return -1; //Put a before b
    if (a.id == b.id) return 0; //Don't make no changes
});

然后'sort'方法调用提供的函数和各种数组元素进行排序。

你的例子做了什么 - 它创建了一个函数对象并立即运行它。

答案 7 :(得分:1)

Justin的回答非常好地解释了,但我想我只是补充说,就程序执行而言,第一组括号(function之前的开头)实际上是完全没有必要的。但是为了便于阅读,这非常重要!当我看到这个:

(function() {

知道立即调用此函数,而无需向下滚动以查找块的结尾。这很重要,因为有时您希望将函数的返回值赋给变量,有时您希望将函数赋给变量。参见:

var x = (function() {
    return 4;
})();

var y = function() {
    return 4;
};

// typeof x == integer (4)
// typeof y == function
相关问题