Mountain One --- 作用域及閉包
一、預(yù)解釋(變量提升)
var function 會進行瀏覽器提前預(yù)解釋,
函數(shù)聲明與var 聲明沖突(var并且賦值)則使用var 的值,否則使用函數(shù)值。(函數(shù)提升優(yōu)先級高于var)
當聲明沖突第二次(多次)不重復(fù)聲明變量,但是會進行重新賦值。
二、作用域鏈
函數(shù)定義在哪就會在按照當前作于域往上查找。(無論在哪執(zhí)行)
三、閉包
只要存在引用(堆~地址) 則不銷毀存在閉包內(nèi)的變量值。
Mountain Two --- 原型與原型鏈
1.每一個函數(shù)數(shù)據(jù)類型(普通函數(shù)、類)都有一個天生自帶的屬性:prototype (原型) ,并且這個屬性是一個對象數(shù)據(jù)類型的值;
2并且在prototype上瀏覽器天生給它加了一個屬性constructor(構(gòu)造函數(shù)),屬性值是當前函數(shù)(類)本身;
3. 每一個對象數(shù)據(jù)類型(函數(shù)、普通的對象、實例、prototype....) 也天生(瀏覽器)自帶一個屬性:"__proto__",屬性值是當前實例所屬類的原型([所屬類].prototype)
Mountain Three --- 異步和單線程
--empty
Postil:
~ children.prototype = new Parents; (quote & private and publice)
~ Parents.call(this) ; ( clone & private )
~冒充繼承 (children in new Parents ~this[key] =?)
~混合繼承 call + ( new Parents && ?:= Parents.prototype )
? why not use " Parents.prototype" ?
quote ~context
~寄生組合繼承 call + Object.create(Parents.prototype)
并且修正被繼承過來的實例的constructor = 子類 方法
clone Parents.prototype .
var arr = new Array(); 實例創(chuàng)建的方式---->構(gòu)造函數(shù)執(zhí)行方式
for ~in : 可遍歷私有屬性(可枚舉)和在原型上(prototype)自定義的屬性(不可枚舉),其它不可枚舉都無法遍歷。
Object.create() ~ 把一個對象的原型( prototype ) 當作返回值的原型鏈(proto)
function Obc(o){
function Fn(){}
Fn.prototype = o;
return new Fn;
}
call fn1.call.call(fn2) fn1.call = 'sdd‘ 替代法解答. call源碼內(nèi)部 ( 會自動 this 執(zhí)行)
reflow 重排 、重繪 存在Node創(chuàng)建文檔碎片.一次性添加