覺得 JavaScript function 很有趣的我是不是很奇怪
- 在 Javascript 裡面,function 也是一個物件,一個 Callable Object,可以呼叫的物件,內部會實作
[[Call]]
這個 method - function 是個物件,所以可以把它當作物件來用,例如用
func.age = 18
來新增屬性跟值 - 不過
func.length
不會是屬性的個數,而是 function 參數的個數 - 利用
call()
跟apply()
可以避免函式複寫的問題,直接呼叫原生的 prototype method
建立函式的常見方法
- Function Declaration:
function a(){}
- Function Expression:
const b = function() {}
- Function Constructor:
const c = new Function()
- Named Function Expression:
const d = function e() {}
named function expression
匿名函式的相反(?)有名函式(?),在用匿名函式的情況下,其實也可以把匿名函式取名,例如:const func = function test() {}
。
此時外面是存取不到 test()
的,只有 test()
自己的函式裡面才能存取的到,外面只能用 func()
。
優點
- Reliable function self-reference:可以 self-reference,例如遞迴
- More debuggable stack traces:debug 比較好在 stack trace 追蹤 code
- More self-documenting code:程式碼可讀性較高(?)
參考資料
覺得 JavaScript function 很有趣的我是不是很奇怪
[day19] YDKJS (Scope) : Kyle Simpson 史上超級無敵討厭 匿名函式(Anonymous function)