Mountain One --- 作用域及闭包
一、预解释(变量提升)
var function 会进行浏览器提前预解释,
函数声明与var 声明冲突(var并且赋值)则使用var 的值,否则使用函数值。(函数提升优先级高于var)
当声明冲突第二次(多次)不重复声明变量,但是会进行重新赋值。
二、作用域链
函数定义在哪就会在按照当前作于域往上查找。(无论在哪执行)
三、闭包
只要存在引用(堆~地址) 则不销毁存在闭包内的变量值。
Mountain Two --- 原型与原型链
1.每一个函数数据类型(普通函数、类)都有一个天生自带的属性:prototype (原型) ,并且这个属性是一个对象数据类型的值;
2并且在prototype上浏览器天生给它加了一个属性constructor(构造函数),属性值是当前函数(类)本身;
3. 每一个对象数据类型(函数、普通的对象、实例、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(); 实例创建的方式---->构造函数执行方式
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源码内部 ( 会自动 this 执行)
reflow 重排 、重绘 存在Node创建文档碎片.一次性添加