一、原型、原型链、优点
1、原型:在javascript中,函数可以有属性。每个函数都有一个特殊的属性叫做原型(prototype)
2、原型链:JavaScript常被描述为一种基于原型的语言(prototype--based language)——每个对象拥有一个原型对象,对象以其原型为模板
、从原型继承方法和属性。原型对象也可能拥有原型,并从中承方法和属性,一层一层、以此类推。这种关系常被称为原型链
(prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。
简单来说:原型链就是在当前对象中找不到定义的话,会在当前对象的原型对象上继续查找,直至undefined
3、原型和原型链的优点
实例对象可以共享构造函数原型属性和方法,节省内存。构造函数原型上的属性和方法越多,节省内存越大
二、作用域、作用域链
1、作用域:作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性,作用域决定了代码区块中变量和其他资源的可见性
ES6后,作用域分为:全局作用域、函数作用域、块级作用域
2、作用域链:在某个函数的内部作用域查找某个变量时,没有找到就会到父级作用域查找,父级没有找到会一层一层向上查找,直到找到全局作用域还没找到,就放弃。这种一层一层的作用域嵌套,就是作用域链
三、闭包、应用场景、优点、存在的问题
1、闭包:在内层函数中访问到外层函数的作用域
2、应用场景:事件函数的封装、用闭包模拟私有方法、在循环中给页面元素绑定事件响应函数
3、优点:变量长期驻扎在内存中、避免全局变量污染、私有成员的存在
4、存在的问题:带来内部变量常驻内存(造成网页性能问题,IE中内存泄漏)=====》解决:在退出函数前,删除不使用的局部变量
闭包在父函数外部,改变父函数内部变量的值。若把父函数当作对象使用,把闭包当作公用方法,把内部变量当作私有属性====》注意不能随意改变父函数内部变量的值
标签:闭包,函数,作用域,对象,优点,原型,属性 From: https://www.cnblogs.com/jundianlucky/p/16815649.html