回答
第二個是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