我经常看到这样的表达:
(function () {
var x = 1;
...
}());
我如何解释它?从语法上讲,这本身就是一个匿名函数定义。
function() {
...
}
之后的 () 是什么?为什么把它放在封闭的()中?
谢谢
我经常看到这样的表达:
(function () {
var x = 1;
...
}());
我如何解释它?从语法上讲,这本身就是一个匿名函数定义。
function() {
...
}
之后的 () 是什么?为什么把它放在封闭的()中?
谢谢
完全一样,只是它在转换为函数表达式后立即被调用。
// v-----first set of parentheses makes the function an expression
(function () {
var x = 1;
...
}());
// ^-----this set is used to invoke the function
就像你这样做一样:
var myfunc = function () {
var x = 1;
...
};
myfunc();
或(类似)这个:
var returnValue = function () {
var x = 1;
...
}();
去掉名称,移动括号,您会发现它们并没有什么不同。
我最常发现这很有用的领域是回调函数。这种表示法也可以用于需要在回调函数中包含变量的情况,但您需要变量状态不受函数外部发生的事情的影响。
var someVal = 1;
setTimeout( (function(one) {
return function() {
alert(one); // alerts a 1 even 10 seconds after someVal++;
}
})(someVal), 10000);
someVal++; // the value in the setTimeout will remain the same as it is locked inside.
在这种情况下, setTimeout 接受一个不带参数的函数。因此,如何将值传递给该函数的问题可以通过创建一个函数来回答,该函数采用一个参数,该函数返回一个采用 0 个参数的函数。
我建议任何想要了解更多关于这种表示法的力量的人都可以在 Firebug JavaScript 控制台中使用它。一旦您了解了这个概念,您就会开始看到可以使用这个强大概念的领域。