javascript - 为什么这个闭包也需要在外部函数处返回?
问题描述
对于 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')。
解决方案
init
不返回任何东西,所以console.log(init())
只会 log undefined
。
return
只会返回当前正在执行的函数的值——它不会return
在调用堆栈中一直执行所有当前正在执行的函数。(毕竟那会很乱而且几乎不可能使用。)所以,你必须在return name
里面displayname
,这样才能displayname
返回一些东西。但是,您希望调用者init
接收该值,因此init
也必须return
使用return displayname()
.
推荐阅读
- php - 变量作为路径参数 (LARAVEL)
- python - 如何绘制分组条形图
- python - TypeError:无法使用 pyautogui.click 多次解压不可迭代的 NoneType 对象
- javascript - 将可拖动元素设置为绝对位置
- angular - Unit Testing with Router.events Angular 9
- java - could not deserialize hibernate
- firebase - How can I use the .where() query in firestore to navigate between different screens? Flutter, Dart, Firebase
- spout - 我使用 Box spout 错误下载 excel,无法下载
- vb.net - Closing dropdown menustrip in webview2
- python - Is it possible to get full control of a user's account, no matter their role in the server?