javascript - 如何将 JavaScript 函数表达式保存在内存中?

标签 javascript

let sayBye = function () {
    console.log(`Bye`);
}

let bye = sayBye;   
sayBye = null;    // X

bye();            // Y

在问这个问题之前,我在谷歌搜索,我发现 this邮政。
然后我想,在第 X 行之前,结构类似这样:

sayBye ---------------                                              
                      |      
                      |  => function() {....}
                      |
bye-------------------

在 x 行之后,我认为它是这样的:
sayBye                        MEMORY                                      
                            
                      |  => function() {....}
                      |
bye-------------------

但是当我在 Firefox 开发人员工具中写再见时,我看到了这个

这怎么可能?当我写 let bye = sayBye; sayBye 被复制了吗?

let sayBye = function () {
    console.log(`Bye`);
}

let bye = sayBye;   
sayBye = null;    // X

bye();            // Y

console.log(bye);

最佳答案

来自 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#Inferred_function_names :

Variables and methods can infer the name of an anonymous function from its syntactic position (new in ECMAScript 2015).


Chrome 和 Firefox 都提供 "sayBye"打印时 bye.name .

根据个人实验,Chrome 控制台显示 bye.toString()当要求 bye ,而 Firefox 显示了他们的自定义输出,其中显示了推断的函数名称(这确实很有意义,因为知道名称通常有助于调试)。

关于javascript - 如何将 JavaScript 函数表达式保存在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64966899/

相关文章:

javascript - reast ai sap 对话的回发

javascript - 如何使用 JavaScript 编辑本地 JSON 文件

javascript - 为什么我无法在 Bootstrap 导航中使用下拉菜单?

javascript - 如何在 CasperJS 中设置 wait() 的值?

javascript - ExtJS 6 带有远程存储的过滤器组合框下拉菜单

javascript - 在 nowjs 中运行不同的实例

Javascript 方式创建多个 HTML 容器?

javascript - React useContext 返回未定义

javascript - 似乎无法通过 Nivo Slider 中的 CSS 定位 img

java - 如何在按下空格键时使用 Jquery 自动完成功能获取数据?