Skip to content

Instantly share code, notes, and snippets.

@dz1984
Created July 23, 2014 00:12
Show Gist options
  • Save dz1984/6cf155cae3ba7599c746 to your computer and use it in GitHub Desktop.
Save dz1984/6cf155cae3ba7599c746 to your computer and use it in GitHub Desktop.
記錄學習 Javascript 點點滴滴
  • 由於 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,但他們卻有幾點不同:

    1. 一個新的 scope object 是在任何該函式被執行時才產生,而 global object 在程式執行之初便出現。
    2. 不像 global object,scope object 中的變數和函式無法直接的被使用,而必須進入該 scope 才能操作
  • closure 是 scope object 和一個 function 的結合,反映了其被創造之時的狀態,且允許你保留狀態。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment