3 回答
TA贡献1807条经验 获得超9个赞
变量和方法可以从语法位置推断匿名函数的名称(ECMAScript 2015 中的新增功能)。
"sayBye"
Chrome 和 Firefox在打印时都会给出bye.name
.
bye.toString()
根据个人实验,Chrome 控制台会在询问 时显示bye
,而 Firefox 会显示他们的自定义输出,其中显示推断的函数名称(这确实有意义,因为知道名称通常有助于调试)。
TA贡献1811条经验 获得超5个赞
函数是对象,因此赋值 x = y 不会被复制。我尝试了这个 Nodejs 我得到
Bye
[Function: sayBye]
如果你没有命名函数,JS 会自动为其添加名称。在 ES6 中,您可以使用 myFunction.name检查函数的名称,即“name”是函数对象的属性。重要的是,这是只读属性。好的做法是使用constwhile letusing 函数表达式。另外,如果可能的话,尝试命名函数,这样在调用堆栈上调试就很容易
TA贡献1834条经验 获得超8个赞
您对函数的名称感到困惑。
记忆中的事情发生的方式和你想象的完全一样。
但是,该函数没有显式名称,因此浏览器为该函数提供了一个隐式名称,即首先分配给它的变量或对象属性的名称,在本例中为sayBye
.
然后,它被分配给另一个变量,但名称不变。
如果你给它一个明确的名称,你可以看到这一点:
// Explicit name ----vvvv
let sayBye = function myFn() {
console.log(`Bye`);
}
let bye = sayBye;
sayBye = null; // X
bye(); // Y
console.log(bye);
添加回答
举报