call,apply,bind这三者的区别,及内部实现原理,点这里
promisepromise函数的内部实现原理,点这里
闭包闭包就是能够读取其他函数内部变量的函数。形式上,就是一个函数返回一个内部函数到函数外,内部函数引用外部函数的局部变量。本质上,闭包是将函数内部和函数外部连接起来的桥梁。
原型链JavaScript中每一个对象都有一个__proto__和constructor属性,每一个函数都有一个prototype属性,因函数也是对象,所以函数也拥有__proto__和constructor属性。
__proto__指向的是它们的原型对象,也可以理解为父对象。如果访问本身一个不存在的属性,那么没有获取之后会去它的原型对象去获取,而原型对象本身也是一个普通对象,如果在它的原型对象中同样没有获取到,那么就会往原型对象的原型对象去获取,直到顶层对象null(原型链终点,一个没有任何属性的对象),返回undefined。这就形成了一条原型链。
prototype属性是函数独有的,是从一个函数指向一个对象,称之为函数的原型对象。原型对象内包含特定类型所有实例共享的属性和方法,作用为被该函数实例化出来的对象找到共用的属性和方法。
constructor是从一个对象指向一个函数,称之为该对象的构造函数。每个对象都有对应的构造函数,因为对象的建立前提是需要有constructor。
节流与防抖节流:
节流是在规定的时间内只执行一次,稀释函数执行频率。比如规定时间2s内执行了一次函数,那么在这2s内再次触发将不会执行。
function throttle(time, fn) { let isRun = false return function () { if (isRun) return isRun = true let arg = [...arguments] setTimeout(() => { fn.apply(null, arg) isRun = false }, time * 1000) } }