標籤:apply 取值 原理 屬性 產生 new prot 記憶體 它的
1、一切參考型別都是對象,對象是屬性的集合;typeof null === ‘object‘(例外);
2、對象都是通過函數建立來的,比如var obj = new Object();typeof Object === ‘function‘;
3、函數有隱藏屬性prototype,對象有隱藏屬性__proto__;
Func.prototype.constructor === Func;
func.__proto__ === Func.prototype;
4、對象的__proto__屬性都指向建立它的函數的prototype;
Object.prototype.__proto === null;
Object.__proto__ === Function.prototype;
Function.__proto__ === Function.prototype;
Function.prototype.__proto === Object.prototpe;
5、instanceof 其實是一種繼承關係,A instanceof B(沿著A的__proto__找,同時沿著B的prototype找,如果最終能找到同一個飲用,就true);
6、訪問一個對象的屬性,如果自身沒有,則沿著__proto__向上找,這就是原型鏈;
7、var obj = {},arr = [];
obj.toString === ‘[object Object]‘;
arr.toString === ‘‘; 說明Array.prototype.toString方法被改了;
8、處於活動狀態的執行內容只有一個;
範圍是一個抽象的概念,其中沒有變數,要通過範圍對應的執行內容來擷取變數的值,且不同的調用會產生不同的上下文;
函數是在定義時就確定了函數體內部自由變數的範圍;
除了全域範圍,只有函數是可以建立一個獨立的範圍;
要區一個變數的值,要到建立它的函數的那個範圍中取值,這就是所謂的靜態範圍;
在A範圍中使用的變數a,卻沒在A中聲明,則稱a是自由變數;
9、1?? 函數作為建構函式用,this指向new出來的對象;
2?? 函數作為對象的一個屬性被調用,this指向該對象;
3?? 在call、apply中,this指向傳入的對象;
4?? 全域調用普通函數,this指向window;
10、閉包特性:函數嵌套函數;函數內部可引用外部變數;變數不會被回收。
閉包是指有權訪問另一個函數範圍中的變數的函數,閉包缺點是容易記憶體泄露。
記憶體回收原理:在javascript中,如果一個對象不再被引用,那麼這個對象就會被GC回收; 如果兩個對象互相引用,而不再被第3者所引用,那麼這兩個互相引用的對象也會被回收。
js繼承與閉包(筆記)