以下代码不起作用:
function addToAnswer(param){
var answer = 10;
function adder(){
return answer + param;
};
adder();
}
console.log(addToAnswer(5)); // returns undefined, expecting 15
此代码的修复方法是 return adder();
我觉得对我来说非常愚蠢,addToAnswer()
应该返回 adder() 的值
函数。如果问为什么不起作用,你会如何回答?
最佳答案
How would you answer if asked why it doesn't work?
我想说,在 JavaScript 中,函数通常不会返回值,除非您显式使用 return
来执行此操作。 (有些语言可以做到这一点,尤其是 CoffeeScript,但 JavaScript 则不然。)
唯一的异常(exception)是简洁箭头函数,它隐式返回它允许包含的一个表达式的结果。
以下是使用简洁箭头函数的示例:
someArray.sort((a, b) => a - b);
// ^^^^^^^^^^^^^^^---- concise arrow function
但这是唯一的异常(exception)。详细箭头函数、function
函数和方法都需要显式 返回
。如果通过该函数采用的代码路径未达到带有值的显式返回
,则调用该函数的结果是值undefined
。
(有些人可能会认为构造函数是该规则的第二个异常(exception),因为当您执行new Thingy
时,即使Thingy
没有返回值,但这不是 true。在这种情况下,是 new
表达式 有结果,而不是构造函数返回任何隐含的东西。事实上,规范中清楚地标明了区别。)
关于JavaScript Closure - 帮助我理解为什么内部函数的返回值不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414532/