首先写一个例子来说明这个问题吧:
function f1(){
var i=0;
return function(){
return ++i;
}
}
var a=f1();
var b=f1;
console.log(a()); //1
console.log(a()); //2
console.log(b()); //function (){console.log(++i);}
很简单,由上面这个闭包函数我们可以看出来:
(1)在将函数名赋值给变量时,是将返回的函数赋值给变量,也就是说将返回的函数的首地址赋值给了变量,所以最后输出的是返回函数。
(2)将函数名家括号赋值给变量时,是将函数的返回值赋值给变量,所以最后输出的是值。