回答
第二个是named anonymous function - 这个名字会出现在一个堆栈跟踪(否则在堆栈跟踪会带您看到的只是“匿名函数”)
中得到解答。从技术上讲,它被称为a命名函数表达式。它被用来实现递归匿名函数,因为你不再允许在html5严格模式下使用arguments.callee – slebetman
@Darhazer:谢谢!如果我打印出a.name,后者将返回“b”。 –
@slebetman:也许你正在考虑JavaScript的严格模式,而不是HTML。 –
首先是一个匿名函数表达式,第二个命名函数表达式,都在Javascript中有效。
例如,它可以用于递归而不使用arguments.callee
(不允许在严格模式下使用),因为它引用自身,无论在哪里。参考范围是本地唯一的功能,那就是它是不可访问全球内:可以省略
var a = function b(){
return b;
};
function c() {
return c;
}
var d = function e() {
return e();
};
d(); // maximum call stack size exceeded :P
var f = c;
c = null;
f(); // null
a(); // function
b();// undefined not a function
b; // not defined
a()(); // same function again
您还有一件事从您的例子中忘记了:调用返回的“b”的a()()(在这种情况下本身就是这样,所以它只是有点愚蠢,但是提供了信息) – slebetman
var a = function() {}
功能名称。在这种情况下,函数名称被省略。这些功能称为匿名功能。
阅读关于javascript作用域和匿名函数优点和缺点的细节。
- 1. 函数'funcName'的隐式声明;之前的'funcName'的隐式声明在这里?
- 2. Javascript - 如何使用窗口[funcName]运行导入的函数?
- 3. jquery通过函数之间的var不使用全局var或var函数
- 4. PHP定义$ varname变化$ _SESSION ['varname']
- 5. funcname();并返回funcname();在form的onsubmint属性中?
- 6. bash FUNCNAME值扩展
- 7. $ FUNCNAME alternative in/bin/sh
- 8. 函数($ var)和函数()使用($ var)有什么不同吗?
- 9. 类型[] varName和类型varName []之间的区别?
- 10. 窗口中的“varName”和窗口中的varName都返回true
- 11. 这是什么jQuery代码做 - 函数($)和VAR = VAR => VAR =>
- 12. 区别?和VBName中的@VarName参数
- 13. 从函数访问var(Struct)
- 14. 第二个函数undefnied var
- 15. 在函数外声明var
- 16. Python函数返回jQuery var
- 17. Javascript函数VAR全球
- 18. 函数自变量在var
- 19. shell脚本中的$ {varname}和$ varname有什么区别
- 20. VAR函数的参数不工作
- 21. 在记录中覆盖“funcName”
- 22. 动态VARNAME,避免的eval()
- 23. jquery的调用从VAR值的函数
- 24. 未知的GW-BASIC函数/语法:Q(var)= var
- 25. $在NetBeans中找不到varName,但找到varName
- 26. if(varName)和if(varName!= NULL)有什么区别?
- 27. 如何访问函数外的var?
- 28. 如何让var内部的onclick函数?
- 29. 将函数的副本分配给var
- 30. jquery函数中var的范围?
@iJay:不,它没有错 –
后者将具有'name'属性,'a.name ==='b'' –
在后者中,b仅在函数内定义,但应该在外部未定义它。目的是允许匿名函数递归。老的Mozilla或IE(不记得)有一个bug,其中b在函数外部没有被定义 - 但递归的东西仍然有效。 – slebetman