是JS的新手,
使用带有功能的对象的简单示例:
var person = {
name: "Bob McBobson",
talk: function descriptiveFunctionName() {alert("Hello");}
};
我注意到您可以命名对象函数(例如上面的descriptiveFunctionName)
在任何情况下都需要/有帮助而不是匿名吗?
答案 0 :(得分:5)
在任何情况下都需要/有帮助而不是匿名吗?
从ES2015开始,即使您在那里遗漏了descriptiveFunctionName
,您的函数也不会是匿名的,它会带有一个名称(talk
)。 ES2015添加了推断的函数名称(最后还有name
属性)。在大多数情况下都可以推断出名称,而没有推断出的唯一真正重要的地方是obj.foo = function() { }
(这会使函数使用名称""
,而不是{{ 1}})。
另外,如果函数将是递归的或以其他方式引用自身(将自身设置为事件处理程序等),则您可能更喜欢通过其名称(在其作用域内)引用它。
因此,添加名称的原因:
"foo"
,并且希望该函数具有名称而不是obj.foo = function nameHere() { };
。答案 1 :(得分:2)
您可能想要执行此操作的另一个原因是可以在以后检索该函数的名称。因此,如果您可以将变量分配给多个函数之一,然后又想查看分配给哪个函数,则可以使用.name
对其进行调用。
var parent = { myFunc: undefined };
var rnd = Math.floor(Math.random() * 3);
switch (rnd) {
case 0: parent.myFunc = function subtract(x) { return x - 1; }; break;
case 1: parent.myFunc = function add(x) { return x + 1; }; break;
case 2: parent.myFunc = function multiply(x) { return x * 2; }; break;
}
console.log(parent.myFunc.name); // subtract, add, or multiply