javascript function vs(function(){…}());
我经常看到如下的expression式:
(function () { var x = 1; ... }());
我如何解读? 在语法上,这本身就是一个匿名函数定义。
function() { ... }
()之后呢? 为什么把它放在封闭的()?
谢谢
完全一样,除了被转换成函数expression式之后立即被调用。
// 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; ... }();
摆脱名称,移动括号,你可以看到他们没有那么不同。
我经常发现这个有用的地方是callback函数。 这个表示法还可以用于需要在callback函数中包含variables的情况,但是您需要variables状态不受函数外部影响。
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接受一个不带参数的函数。 所以如何将一个值传递给该函数的问题可以通过创build一个函数来解决,该函数接受一个返回一个带有0个参数的函数的参数。
我build议任何人想要了解更多关于这个符号的力量,在Firebug JavaScript控制台中玩弄它。 一旦你围绕这个概念,你会开始看到这个强大的概念可以使用的地方。