JavaScript Closure - 帮助我理解为什么内部函数的返回值不返回

标签 javascript closures

以下代码不起作用:

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/

相关文章:

javascript - 这个回调函数示例如何工作?

ios - 将数据从 Collection View 单元传递到 View Controller

javascript - 滚动事件上的jquery

javascript - Sass Gulp 损坏

javascript - 使用 jQuery 遍历 DOM

javascript - 以下nodejs代码之间的区别

javascript - 这是闭包内的循环引用吗?

javascript - grunt sass 任务不起作用?

javascript - ag-grid 对单元格值的排序已更改

javascript - 根据选择选项值加载 getJSON 的 url