闭包和原型链
闭包:
简单的理解就是:闭包就是能够读取其他函数内部变量的函数,它两个最大的用处:
①可以读取函数内部的变量,
②让变量的值始终保持在内存中。闭包与它的词法环境绑在一起,因此闭包让我们能够从一个函数内部访问其外部函数的作用域 。
闭包特点:函数A嵌套函数B , 函数B能访问函数A的变量 , 最后返回函数B; (函数B就是闭包)
闭包的优缺点:
优点:有利于封装,可以访问局部变量
缺点:一直留在内存中,浪费内存,有可能发生内存泄漏
原型链:
当调用一个对象的属性时 , 如果自身对象未找到 , 会去对象的__proto__属性(隐式原型对象)里去找 , (这里的隐式原型对象指向的就是它构造函数的prototype(显示原型对象))
然后原型本身也是一个对象 , 拥有__proto__ 属性 , 所以会继续向上查找 ,一直找到Object.prototype.proto===null 这样的链条称之为原型链
原型链的个人理解:
thing是Thing2的实例.
thing的__proto()__指向Thing2的prototype
Thing2的原型对象 = Thing1的实例对象,
new Thing1()的__proto__指向Thing1的prototype.
在Thing1的prototype里找到了foo属性