闭包、作用域链、原型链

一、闭包

闭包:

闭包指有权访问另一个函数作用域中变量的函数,创建闭包最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包就可以突破作用域。(就是能够读取其他函数内部变量的函数)

闭包的特性:

函数内再嵌套函数;

内部函数可以引用外层的参数和变量;

参数和变量不会被垃圾回收机制回收。

使用闭包主要是为了设计私有的方法和变量。闭包的优点可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄漏。在JS中,函数即闭包,只有函数才会产生作用于的概念。

闭包用处(3个):第一个,可以读取函数内部的变量;第二个,就是让这些变量始终保持在内存中;第三个,封装对象的私有属性和私有方法。

好处:能够实现封装和缓存等;

坏处:消耗内存,不正当使用会造成内存溢出的问题。

使用闭包注意点:

由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

二、作用域链的理解

作用域链的作用:保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的。简单说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。

三、JavaScript原型,原型链的理解

每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。

关系:instance.constructor.prototype=instance.__prototype__

特点:JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。当我们需要一个属性时,JavaScript引擎会先看当前对象中是否有这个属性,如果没有的就会查找他的prototype对象是否有这个属性,如此递推下去,一直检索到Object内建对象。

猜你喜欢

转载自www.cnblogs.com/p0123/p/12001690.html
今日推荐