闭包中匿名函数什么时候调用?

来看看这段代码

var n = 0;
function move(x) {
return function () {
n = x;
}
}
move(30);
alert(n);

猜一下这个窗口会弹出多少? 是30 还是0?

答案是 0

为什么是这样呢, 让我们修改一下代码就明白了.

var n=0;
function move(x) {
return function () {
n=x;

}
}
alert(move(30))

这个时候函数没有立刻运行.因为闭包返回的函数不会立刻调用.而是当你调用的时候才会调用. 所以返回了一个没有运行的函数体

var n=0;
function move(x) {
return function () {
n=x;
}
}
result=move(30)();
alert(n);

  • 当这个时候弹出的值就是
  • 因为这个时候move()() 真正调用了内部的匿名函数.

总结来说,闭包中的匿名函数,如果没有调用.只会返回一个函数体.

但是只针对闭包中的匿名函数,如果是一个普通的函数.会直接运行,如下代码


function cons() {
console.log("I am function 2")
}
function move2() {
console.log( "I am function 1")
return cons()
}
move2();

会在控制台输出 I am function 1 和I am function 2. 在上述情况下调用非匿名函数,会一起执行.

posted @ 2017-03-07 22:49  MaxProAim  阅读(752)  评论(3)    收藏  举报