instanceOf學習筆記

  * 自用筆記:instanceOf學習 *

instanceof運算規則:

如果運算符後面的函數 的prototype屬性所引用的對象,
出現在 運算符前面的對象 的原型鏈上的話,就返回true;
否則就返回false。
2. 繪製作用域鏈的規則
1》 將整個script標籤的全局作用域,定義爲0級作用域鏈。將全局作用域上的數據(變量、函數、對象等等)繪製在該鏈上。
2》由於在詞法作用域中,只有函數可以分割作用域。因此,只要遇到函數,就要引申出新的作用域鏈,級別爲當前鏈的級別 + 1;
3》 重複第二步驟,直到沒有遇到函數爲止。
3. 變量的搜索原則:當訪問一個變量時,
1》 首先在當前變量所處作用域鏈上查找,如果找到就直接使用,並停止查找;
2》 如果沒有找到,就向上一級鏈(T - 1)上去查找,如果找到就直接使用,並停止查找;
3》 如果沒有找到,就繼續向上一級鏈查找。直到0級鏈,如果找到就直接使用,並停止查找;
4》 如果沒有找到就報錯。
注意:
1》 如果訪問的變量不存在,會搜索整個作用域鏈(不僅性能低,而且拋出異常。)
在實際開發,不推崇所有數據都寫在全局上。儘量使用局部變量。推薦使用沙箱。
如果在開發中,所有js代碼都寫在全局上,會造成全局變量的污染。
2》同級別的鏈上的變量互不干擾。
4. 在函數執行的時候,會創建一個執行的環境,包括activeObject(活動對象)以及作用域鏈
1> activeObject: 存儲的是所有在函數內部定義的變量,以及函數的形參;
會將變量名字以及形參名字作爲該對象的屬性來存儲
5. 閉包
1》概念:一個函數有權去訪問另一個函數的內部數據。
2》缺點: 會造成函數內部的數據常駐內存,從而引發內存泄漏的問題。
3》解決的問題:解決在函數外部無法訪問函數內部的數據。s
4》爲了防止閉包導致內存泄漏,在使用完閉包後,將其賦值爲null即可。
5》閉包怎麼緩存數據?因爲在函數內部有方法(函數)對其有引用,並且又將其返回到外部作用域上的一個變量接收。
6. 垃圾回收機制:GC(Garbage Collection)
1.  引用計數
如果一個變量被另一個變量引用,那麼該變量的應用計數+1;當這個變量不再引用該變量(該變量被回收掉了)時,
此時這個變量的引用計數 - 1;
GC會在一定時間間隔去查看每個變量的計數,如果爲0, 就將其佔用的內存回收。
缺點: 循環引用:會造成無法回收變量的內存


    a{ val : b} , b{val:a} b = null;(a = null)

2. 標記清除
從當前文檔根部(window對象)找一條路徑,如果能到達該變量,那麼說明此變量不應該 被回收掉
反之,應該被回收其所佔用的內存。
–如果變量進入某個執行環境,那麼給其標記爲 “進入環境”;
–如果上述執行環境執行完成,被銷燬,那麼該環境內的所有變量都被標記爲“已出環境”
–如果變量被標記爲已出環境,就會被回收掉其佔用的內存空間。

  1. 閉包的應用
  2. 計數器
  3. 對象的私有屬性
  4. 解決fib數列遞歸性能
  5. 沙箱模式: 好處: 不會污染全局變量(或者其他作用域的變量),並且能保證自己的代碼安全執行。
    特性:a: 能分割作用域,不會污染全局 fn
    b: 在分割後的作用域內部的代碼要能自執行。fn()
    結構:
    (function (){
    //代碼塊
    window.fn = fn;
    }());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章