let sayBye = function () {
console.log(`Bye`);
}
let bye = sayBye;
sayBye = null; // X
bye(); // Y
Run Code Online (Sandbox Code Playgroud)
在问这个问题之前,我在谷歌搜索,我找到了这篇文章。
然后我想,在第 X 行之前,结构类似于这样:
sayBye ---------------
|
| => function() {....}
|
bye-------------------
Run Code Online (Sandbox Code Playgroud)
x线之后,我以为是这样的:
sayBye MEMORY
| => function() {....}
|
bye-------------------
Run Code Online (Sandbox Code Playgroud)
但是当我在 Firefox 开发人员工具中写再见时,我看到了这个
这怎么可能?我写let bye = sayBye;的时候sayBye被复制了吗?
let sayBye = function () {
console.log(`Bye`);
}
let bye = sayBye;
sayBye = null; // X
bye(); // Y
Run Code Online (Sandbox Code Playgroud)
变量和方法可以从语法位置推断匿名函数的名称(ECMAScript 2015 中的新功能)。
Chrome 和 Firefox 都"sayBye"在打印时给出bye.name。
根据个人实验,Chrome 控制台会bye.toString()在请求bye时显示 ,而 Firefox 会显示他们的自定义输出,在那里他们会显示函数的推断名称(这确实有道理,因为知道名称通常有助于调试)。