以下JavaScript是什么意思?为什么函数嵌入在()?
中(function() {
var b = 3;
a += b;
}) ();
答案 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