1.什么是闭包?应用场景
闭包就是函数嵌套函数的特殊形式:1.函数作为参数被传入
2.函数作为返回值被返回
闭包其实也是自由变量的特殊表现形式:1.自由变量:没有在当前作用域声明的变量
2.自由变量的值和作用域是在函数定义的时候去欸的那个,不是在函数执行的时候确定
优点:1.可以变量私有化,避免变量的全局污染
2.自由变量值,存储在内存中不会被销毁
应用场景:1.封装组件,插件库的时候避免变量全局污染
2.创造局部作用域变量,类似于let效果
2.如何实现继承
1.构造函数绑定:使用 call 或 apply 方法,将父对象的构造函数绑定在子对象上
functionA(name){this.name=name}
functionB(name,age){
A.call(this.age)
this.age = age;
}
B.prototype = Object.create(A.prototype)
B.prototype.constructor = B
2.实例继承:将子对象的 prototype 指向父对象的一个实例
3.拷贝继承:如果把父对象的所有属性和方法,拷贝进子对象
4.原型继承:将子对象的 prototype 指向父对象的 prototype
5.ES6 语法糖 extends:class ColorPoint extends Point {}
3.原型与原型链应用场景
每一个对象都有一个隐式原型__proto__
每一个构造函数都有一个显示原型__prototype__
对象实例的隐式原型等同于,创建该对象的构造函数的显示原型prototype
当查找一个对象的方法和属性,先在自身对象属性上查找,找不到,则沿着隐式原型__proto__向上查找,(__proto__.__proto__)
Object.prototype.__proto__ 结果为null
应用场景:
1.实现继承
2.创建实例的公共方法:Vue.__prototype__.$http = axios
4. 实现深拷贝
1.什么是闭包?应用场景
闭包就是函数嵌套函数的特殊形式:1.函数作为参数被传入
2.函数作为返回值被返回
闭包其实也是自由变量的特