为什么这不能是一个js函数呢?

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();
阅读 1.9k
2 个回答
function f3(){
    var n=9;
     n+=1;
   console.log(n);
}
var clouser=f3();
clouser();

在这个例子中,函数f3没有显式return,根据规范,引擎会隐式返回一个undefinded,即相当于在f3函数体最后一行加上return undefined

return后面的表达式就是函数的返回值。而对于一个函数,在后面加上一对圆括号()代表运行这个函数,将返回值赋给等号左边的变量。

因此变量clouser的值是undefinedundefined是无法运行的。

下面的例子同理,区别在于最后return的是一个函数,因此clouser也是一个函数,所以是可以运行的。

跟闭包没关系啊,你下面的那个返回的是一个函数,上面的返回的n是一个值,肯定不行了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题