function f3(){
var n=9;
n+=1;
console.log(n);
}
var clouser=f3();
clouser();
这个函数可以打印出n的值,为什么在控制台里会显示Uncaught TypeError: clouser is not a function.??在学习闭包的概念,如果代码是下面这样的就不会报错,我以为是要有return,但是上面这样写,我加了句return n,还是会报同样的错误,一定要闭包才能是函数?
function f3(){
var n=9;
nAdd=function(){
n=n+1;
console.log(n);
}
return nAdd;
}
var clouser=f3();
clouser();
在这个例子中,函数
f3
没有显式return
,根据规范,引擎会隐式返回一个undefinded
,即相当于在f3
函数体最后一行加上return undefined
。return
后面的表达式就是函数的返回值。而对于一个函数,在后面加上一对圆括号()
代表运行这个函数,将返回值赋给等号左边的变量。因此变量
clouser
的值是undefined
。undefined
是无法运行的。下面的例子同理,区别在于最后
return
的是一个函数,因此clouser
也是一个函数,所以是可以运行的。