来看看这段代码
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. 在上述情况下调用非匿名函数,会一起执行.