在JavaScript中命名匿名函数有什么区别?

前端之家收集整理的这篇文章主要介绍了在JavaScript中命名匿名函数有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在从John Resig的网站分析以下两个网址,但我不明白如何给匿名功能命名有所改变.

我的理解是,给匿名函数名称只能在函数定义中使用,而不在其外部,但是在以下链接中,这是一个巨大的差异

> http://ejohn.org/apps/learn/#13
> http://ejohn.org/apps/learn/#14

任何解释或参考将是一个很大的帮助.

我仍然在#14中与以下几行混淆

var samurai = { yell: ninja.yell }; 
var ninja = {};
assert( samurai.yell(4) == "hiyaaaa","The method correctly calls itself." );

当忍者现在指向一个空白对象时,Samurai.yell方法仍然能够指向ninja.yell. #13和#14之间的区别只在#14中为函数表达式提供一个名称. ninja.yell COPIED可以大喊大叫,没有被引用,或者这些NAMED函数表达式在某些场景中具有这样的全局范围?

Same thing happens in #13 and #14,only difference is that function is named in #14 and unnamed in #13 plus ninja = {} in #14 and ninja = null in #13. Is there any hidden concept about NAMED FUNCTION EXPRESSIONS that I am missing which makes #14 workable and #13 not workable.

解决方法

不想与科琳克抗争,但他说这不是一个很好的例子,他有点太过分了. #14与你共享的链接有关(命名函数表达式(与函数声明不同的动物)).不管函数引用在哪里传递,如果你命名你的函数表达式,它将始终有一种方法调用自身.这个名字,你给你的函数表达式,是一个只有它知道的名字;它不存在于任何外部范围内.

请参阅MDN上的herehere,以进一步讨论函数表达式与函数声明.底部的第二个链接有一个关于命名函数表达式的标题.它有一个用途;有关一次性递归函数的示例,请参见my Gist,对本地或全局变量范围(对于一次性DOM遍历有用)也不添加任何内容.

此外,Tobias(在他的回答中)指出了命名函数表达式的其他好处,即调试.

原文链接:https://www.f2er.com/js/152933.html

猜你在找的JavaScript相关文章