首页 > 解决方案 > 为什么这个闭包也需要在外部函数处返回?

问题描述

对于 Javascript 中的闭包,我有下面的代码,非常简单,但我试图理解闭包的复杂性,而下面的代码并没有按照我认为的方式工作。我正在使用 Node.js 终端窗口(不是 console.log 的浏览器)。

function init() {
  let name = 'rumbo'; // i created a simple variable inside the parent function (i get this)

  function displayname() {
    return (name); //inner function with a **return** of the variable above (i get this also)
  }
  displayname(); //* see note below
}

console.log(init()); //as per my thought, this should console log 'rumbo' but it does not.

*这会吐出“未定义”。(我明白了;当您没有具体说明或在外部函数中使用 return/或 console.log 时,您将得到未定义。但是,在这种情况下,displayname() 函数在外部函数的末尾被调用,并且应该从内部函数返回值返回 'name' 。但事实并非如此。

所以这就是我的问题,为什么这个外部函数调用时返回结果(在本例中为'rumbo')。

标签: javascriptclosures

解决方案


init不返回任何东西,所以console.log(init())只会 log undefined

return只会返回当前正在执行函数的值——它不会return在调用堆栈中一直执行所有当前正在执行的函数。(毕竟那会很乱而且几乎不可能使用。)所以,你必须在return name里面displayname,这样才能displayname返回一些东西。但是,您希望调用者init接收该值,因此init也必须return使用return displayname().


推荐阅读