0

两者的区别是什么

设置={编辑:功能(键、值){return anotherFunction(键,值){返回值*2;};}};

设置={编辑:功能编辑(键、值){return anotherFunction(键,值){返回值*2;};}};

?

3个答案

重置为默认值

执行时没有区别。

然而,在第二种情况下(命名函数),您可以更容易地递归调用该函数,因为它有一个名称。

例如,使用命名函数可以执行以下操作:

事实:函数阶乘(n){如果(n==0),返回1;返回n*阶乘(n-1)//您可以使用命名函数轻松完成此操作}

如果没有名字,这将很棘手。

干杯

6
  • 呃,如果没有名字,这很容易:this.fact()。无需命名即可轻松调用函数:var x=函数(){x()}.
    – 用户229044
    评论 2014年1月12日5:04
  • @meagar如果函数不是对象的一部分怎么办? 评论 2014年1月12日5:05
  • var x=函数(){x()}
    – 用户229044
    评论 2014年1月12日5:06
  • 在这种情况下回调(函数f(n){f(…);});使用命名函数更容易(其他选项更难) 评论 2014年1月12日5:09
  • “容易得多”是很主观的;f=函数(){return f(…);};回调(f);
    – 用户229044
    评论 2014年1月12日5:10
1

本质上的区别是更好的调试。在开发工具中,第二个示例中的命名函数将显示为编辑回溯;您的第一个示例将显示为匿名的。当你深入10个函数时,这可能会非常令人困惑全部的打电话匿名的.

2
  • 这是一个很好的观察结果。我试图分析Ghost.js以了解节点应用程序的工作方式,这可能是命名函数的最佳原因。
    – 亚当·S
    评论 2014年1月12日4:55
  • 1
    真的是这样。每个谈论递归的人都没有抓住要点。你不需要命名函数进行递归,只需要一个引用该函数的变量。您仍然可以以这种方式递归调用匿名函数。
    – 用户229044
    评论 2014年1月12日5:07
0

给函数一个固有名称有三个原因。第一,每个人都这样做。这是每个人都习惯的。

函数阶乘(n){var累计=1,i;对于(i=1;i<=n;i++){累计*=i;}回归累积;}

第二是更好地理解堆栈跟踪,正如@meagar所写。

第三种方法是让您递归地编写调用函数。

var阶乘=函数(n){变量a=1;return(函数factRecursive(k,a){if(k>=2){返回事实递归(k-1,k*a)}else{返回a;}})(n,a);}
0

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.