原型
每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象
所有引用类型,它的’_ _ proto_ _'属性指向它的构造函数的’prototype’属性
var a = []
a.__proto__ === Array.prototype
a.__proto__.__proto__ === Object.prototype
Object.prototype.__proto__ === null
Array.prototype.constructor === Array
Array.prototype.__proto__ === Object.prototype
var a = Object.creat(b) // a的原型为b
var obj = { name: 1 }
var f = Object.create(obj)
f.name // 1

####闭包
定义: 函数就是闭包 = 能够访问另一个函数内部的变量的函数。
function a () {
var b = 0
return function () {
console.log(++b)
}
}
var b = a()
b() // 1
防抖与节流
防抖: 事件在n秒后触发,如果n秒之内再次触发,重新计算触发事件。
节流: 高频事件在n秒内只执行一次,时间之内多次触发无效。
apply call bind 区别
fun.apply(thisObj, [args]) // 立即执行
fun.call(thisObj, ...args) // 立即执行
fun.bind(thisObj, ...args) // 返回函数,不会立即执行
隐式转换 + ==
// 布尔类型转化为number , 对象valueOf toString
true == 1
[] == !{}
[] + {}
{} + {}
{} + 1