美文网首页
深入理解js闭包

深入理解js闭包

作者: 小香猪的主人 | 来源:发表于2017-07-09 12:07 被阅读0次

一、概念
定义在函数内部的函数,通俗理解就是能够读取其他函数内部变量的函数。
二、用途
闭包的用途:其一就是读取函数内部的变量;其二就是让这些变量始终保持在内容中。
三、实例剖析
function f1(){
var n=999;
ndd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result();//999
ndd();
result();//1000
该例子中,result实际上就是闭包了f2函数,该函数工运行了两次,第一次运行后999,第二次运行结果是1000,这说明函数f1的局部变量n一直在内存当中,没有在函数f1被用结束自动清除。原因在于f1是f2的父函数,而f2被赋值给一个全局变量,这到这f2始终保存在内存当中,而f2的存在依赖于函数f1,因此f1始终在内存中,在调用结束后不会被垃圾回收机制回收。
ndd这一行前边并没有加var这个关键词,因此ndd是一个全局变量,而且ndd本身是一个函数,它也是个闭包,所以ndd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。
四、使用闭包注意点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

相关文章

  • js深入理解js闭包

    一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变...

  • 深入理解js闭包

    深入理解js闭包 1.闭包的含义 1.1 闭包:有权在一个函数内部可以访问另一个函数作用域并且将此函数返回 2.想...

  • 深入理解js闭包

    一、变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和...

  • 深入理解js闭包

    一、概念定义在函数内部的函数,通俗理解就是能够读取其他函数内部变量的函数。二、用途闭包的用途:其一就是读取函数内部...

  • 深入理解js闭包

    什么是闭包 MDN的解释:闭包是函数和声明该函数的词法环境的组合。 简单讲,闭包就是指有权访问另一个函数作用域中的...

  • 深入理解js闭包

    什么是闭包 MDN的解释:闭包是函数和声明该函数的词法环境的组合。 简单讲,闭包就是指有权访问另一个函数作用域中的...

  • 深入理解javascript原型和闭包[目录]

    文章地址:深入理解javascript原型和闭包 文章:深入理解javascript原型和闭包 目录列表 (不能跳...

  • 深入理解闭包(六)——闭包

    原文地址:深入理解闭包(六)——闭包 终于讲到闭包了,这一路走来不容易。从前面的博文中我们知道,js的垃圾回收机制...

  • 探索奥秘~闭包

    在我学习初期我对闭包的理解也不是很深,最近在学习了js更深入的知识后,对闭包有了更加深入的了解,下面我就跟大家详细...

  • 深入理解javascript原型和闭包(完结)

    深入理解javascript原型和闭包(1)——一切都是对象 深入理解javascript原型和闭包(2)——函数...

网友评论

      本文标题:深入理解js闭包

      本文链接:https://www.haomeiwen.com/subject/xjsshxtx.html