[英]What is the benefit of naming a function in a function declaration in javascript?
我有时看到这种模式
function foo() {
this.bar = function bar() {
// code
}
}
给函数命名而不是将其作为匿名函数的好处/原因是什么?
为了进一步说明/澄清:
function foo() {
this.bar = function bar() {
bar.someVar = 1;
}
}
VS
function foo() {
this.bar = function() {
this.someVar = 1;
}
}
谢谢
我想从根本上来说,您可以用一个问题来回答您的问题。 问题是,如果不命名该函数,将如何在其他位置显式调用该函数?
当然,您提供的示例在没有名称的情况下仍然可以使用,因此我建议,与开发人员的个人喜好和所有功能有关的事情一样多。 我个人喜欢为函数命名,以便于调试,重用和可读性以及显式调用它们的有用性。
通过一次创建函数并重新使用它们,还可以获得明显的性能优势。
命名function
的主要好处是允许它是自引用的 ,尤其是对于递归而言:
如果要引用函数体内的当前函数,则需要创建一个命名函数表达式。 这样,该名称仅在功能主体(作用域)中是局部的。 这也避免了使用非标准的arguments.callee属性。
var math = { 'factorial': function factorial(n) { if (n <= 1) return 1; return n * factorial(n - 1); } };
也就是说,无需知道其持有对象和引用属性名称即可更改:
// a contrived and hopefully unrealistic example
function foo() {
this.bar = function () {
return this.bar;
};
}
console.log(new foo().bar()); // Function
console.log(new foo().bar.call({})); // undefined, `{}` doesn't have a `bar`
如前所述,这是对arguments.callee
的部分“ 取缔 ”的可用解决方案:
注意 :应避免使用
arguments.callee()
而应为每个函数(表达式)命名。警告 :ECMAScript的第五版禁止在严格模式下使用
arguments.callee()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.