-
由於 arguments.callee 是目前的函式,而所有的函式都是物件,你可以因此用 arguments.callee 來在多次呼叫同個函式之間儲存資料。這個函式會記得它被呼叫過多少次:
function counter() { if (!arguments.callee.count) { arguments.callee.count = 0; } return arguments.callee.count++; } > counter() 0 > counter() 1 > counter() 2
-
apply()第一個參數是物件,第二個參數為陣列。另外,apply() 有一個姊妹函式叫做 call,差異在於 call() 接受一個可被擴展的參數串列而非一個陣列。
-
假如某函式需要其他一兩個函式,而這一兩個函式在整個程式的其他部分都不需要用到,你便可以把這些所謂「工具函式」(utility function) 給巢狀性地包在需要它們的函式內,這個主要函式再從其他地方呼叫。這樣便能保持全域領域 (global scope) 的函式不會太多。不在全域領界內塞太多函式是件好事情。
-
巢狀函式可與其母函式一起共用變數,因此你可以用這個原理來在適當的時機將好幾個函式配在一起,而不用「汙染」全域命名空間 (global namespace)--這可以稱做「本地變數」 (local variable)。
-
scope object 可以根據傳入的參數來做初始化的動作。這聽起來有點類似存放所有 global 變數和 global function 的 global object,但他們卻有幾點不同:
- 一個新的 scope object 是在任何該函式被執行時才產生,而 global object 在程式執行之初便出現。
- 不像 global object,scope object 中的變數和函式無法直接的被使用,而必須進入該 scope 才能操作
-
closure 是 scope object 和一個 function 的結合,反映了其被創造之時的狀態,且允許你保留狀態。
Created
July 23, 2014 00:12
-
-
Save dz1984/6cf155cae3ba7599c746 to your computer and use it in GitHub Desktop.
記錄學習 Javascript 點點滴滴
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment