第一个情况,return bar(); 就是 运行 bar(),然后将 bar()的返回值再作为foo的返回值,当你调用 foo(2,10)的时候,将会运行 bar(),即弹出16。
第二种情况,将一个函数作为返回值,所以var ff = foo(2,10); ff就是那个匿名函数,你可以 ff(); 试试 ,看看是不是弹出16.
猜想, 如果 将第一种情况 return bar(); 改成 return bar; 可能就跟第二种情况一样了,这才是返回函数名,没测试过,不知道是否可以这样。
return bar(); //返回函数名
这不是返回函数名,是返回bar函数的执行结果, 应该把括号去掉。