概述
闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。
1.何为闭包
百度百科的理解是 闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
通俗的讲就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。
2.那如何理解闭包呢?
首先要理解闭包,就得理解JavaScript的变量作用域
1)变量作用域
在JavaScript中变量的作用域无非两种,一种是全局作用域,一种是局部作用域,我们都知道JavaScript的特点就是函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。
2)那如何从外部读取函数内部的局部变量?
在实际情况下使用时,如果要从外部读取到函数内部使用的局部变量呢?在通常的写法中,肯定是没有办法的,这时候只有在函数内部写一个函数,再从这个函数中把变量给返回出来,代码如下
funtion fn1(){
var n=999;
function fn2()
return n; // 999
}
}
上述代码中fn2可以访问fn1的变量,而fn1则不能访问fn2中的变量,这就是JavaScript中特有的“链式作用域”
子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
3)闭包的概念
就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。
在上述的代码中就符合了这一点,所以就可以说fn2函数是一条闭包
闭包使用的注意点
(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
最后
以上就是可爱灯泡为你收集整理的谈谈我对JavaScript闭包的理解闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。的全部内容,希望文章能够帮你解决谈谈我对JavaScript闭包的理解闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复