【问题标题】:What is the point of using a named function expression? [duplicate]使用命名函数表达式有什么意义? [复制]
【发布时间】:2013-10-10 18:52:13
【问题描述】:

我正在浏览这篇关于函数声明和函数表达式之间区别的博客。

它给出了这两个例子。他们称第一个为“匿名函数表达式”,第二个为“命名函数表达式”。

// anonymous function expression
var a = function(){
   return 3;
}

// named function expression
var b = function bar(){
   return 3;
}

我在 Chrome 的 JS 控制台中测试了这两个,我看到以下内容:

a()
=> 3

b()
=> 3

bar()
=> bar is not defined

我的问题是:在第二个函数表达式声明中,“bar”的意义何在?一般来说,为什么要使用命名函数表达式?

【问题讨论】:

标签: javascript function-expression


【解决方案1】:

有些人喜欢这样做,因为如果发生错误,您的函数就会有名称。这主要是一个偏好问题,以及您在使用未命名函数时遇到问题的频率。

您通常不会在 var 声明中看到它,而是在声明回调时看到它:

callbackFunction(function success() { ... }, function fail() { ... })

这样您就知道哪个参数是哪个参数,它们会被标记,如果其中一个失败,您可以准确指示哪个参数坏了。

【讨论】:

  • +1。 a.name === "" && b.name === "bar".
  • 另一个原因是递归调用函数。
【解决方案2】:
var b = function bar(){
   return 3;
}
bar()
=> bar is not defined

标识符bar 仅为available inside of the function。试试

var b = function bar() {
    console.log(bar);
}
b();

为什么要使用命名函数表达式?

允许引用未分配给可访问变量或常量变量的函数表达式,例如在IEFE 中进行递归。

此外,命名函数在调试过程中显示不同,例如在调用堆栈(跟踪)或断点列表中。通常你可以使用(命名的)函数声明而不是函数表达式,另见http://blog.niftysnippets.org/2010/03/anonymouses-anonymous.html

【讨论】:

    猜你喜欢
    • 2021-04-26
    • 2019-10-09
    • 2012-12-27
    • 2012-12-31
    • 1970-01-01
    • 2021-12-15
    • 2017-02-07
    相关资源
    最近更新 更多