什么是js闭包?

作者: 8fda73aa8a1f | 来源:发表于2016-02-01 13:08 被阅读217次

熟悉javascript的人应该都知道,在javascript中,有两种变量存在,即局部变量和全局变量。局部变量和全局变量之间的区别在于作用域不同。全局变量可以被任何函数调用,而局部变量只能在函数内部被调用,通常情况下在函数外部是无法调用其局部变量的,而利用闭包技术,可以做到这一点。简单来说,闭包就是能够读取其他函数内部变量的函数,也就是说,闭包是一个创建于函数内部的函数,是一个连接函数内部与外部的桥梁。

下面我用一个例子来简单解释一下:

function func1(){

var n=100;

functionfunc2(){

alert(n);

}

returnfunc2;

}

var result =func1();

result();

运行上面代码的时候可以弹出100

这就是一个最简单的闭包,这个例子当中的result函数就读取到了func1中的局部变量。

闭包还有一个作用,那就是存储变量的值,而且这些值会一直保存在内存中。

比如下面的例子:

function func1(){

var n=999;

nAdd=function(){

n+=1

}

function func2(){

alert(n);

}

returnfunc2;

}

var result=func1();

result(); //弹出999

nAdd();

result(); // 弹出1000

如此反复下去,其值会一直保存下去,而不会在每次调用之后清除。为什么会这样呢?请仔细看上面的例子,func2是func1的子函数,func2依赖于func1,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中。

由以上例子我们不难想象,闭包其实会造成内存比较大的压力,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

js闭包是js中一个比较抽象且比较难理解的一个知识点,需要一个循序渐进的过程,不理解也不要着急,如果不能准确把握闭包的写法,为了网页的性能,可以避免使用闭包,如果非得已要使用,一定记得在函数退出之前清除所有不需要用的局部变量,以防止内存泄漏。

今天就聊这么多了,周末愉快,明天我将给大家分享一个小技巧。敬请期待!

相关文章

  • JS闭包入门

    最近有看到朋友的面经里提到的JS闭包的问题,就想研究研究,以下是我对JS闭包的简单理解。 到底什么是JS闭包? 定...

  • 闭包??

    什么闭包,闭包有什么用?http://js.jirengu.com/pogadikofa/1/闭包是在某个作用域内...

  • 简单的聊一下闭包

    js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...

  • 浅谈闭包

    js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...

  • 2018-01-10

    js中的闭包 一.什么是闭包 闭包官方的解释是:闭包就是能够读取其他函数内部变量的函数。由于在javascr...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • JS闭包

    JS闭包 闭包练习

  • 什么是js闭包?

    熟悉javascript的人应该都知道,在javascript中,有两种变量存在,即局部变量和全局变量。局部变量和...

  • JavaScript闭包学习笔记

    @(JS技巧)[闭包] JavaScript闭包学习笔记 什么是闭包? 有些情况下,函数调用完成之后,其执行上下文...

  • 一分钟理解js闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

网友评论

    本文标题:什么是js闭包?

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