匿名函数和闭包紧紧相关. 想要理解闭包首先要搞懂匿名函数的运行方式.这次就探究一个问题,
到底是谁在调用匿名函数?
先让我们了解一下,匿名函数声明的两种方式.
第一种
var a = function(x) { return x*x; }
第二种
(function(x){
alert(x*x);
})(2);
这两种方式都是匿名函数,效果一样. 第二个传递了参数,立刻运行. 第一个可以调用运行.当我们要立即用一个一次性函数的时候,大多数用第二种.
那么问题来了,任何程序都有调用者. 匿名函数的调用者是谁呢?
-
先看第一种
var a = function() { return alert(this); } a();
-
结果是
-
再看第二种
(function(x{ alert(this); })(2);
-
结果是
-
再来看一个闭包
function move() { return function () { alert(this) } } move()();
-
结果是