函数返回函数的执行差异:为何func1输出7而func2无控制台输出?
两个JavaScript函数输出差异的原因解析
先看你给出的代码:
function func1(){ function sum(){ console.log(2+5); } return sum(); } func1(); function func2(){ return (function sum(){ console.log(2+5); }) } func2();
核心差异就在函数是否被主动调用:
- func1里,
return sum()中的sum()是带括号的写法,这表示直接调用sum函数。所以当func1执行时,会先定义sum,然后立即调用它,控制台自然输出7,最后返回sum函数的执行结果(这里sum没有return语句,所以返回undefined)。 - func2里,
return (function sum(){...})返回的是一个未被调用的函数表达式。当你执行func2()时,只是拿到了这个sum函数的引用,但并没有触发它执行,所以控制台不会有任何输出。
如果想让func2也输出7,只需要给返回的函数加上调用括号就行:
function func2(){ return (function sum(){ console.log(2+5); })() // 这里加上括号,调用这个函数表达式 } func2();
内容的提问来源于stack exchange,提问作者SHAILY
相关产品推荐
相关产品推荐

