什么是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闭包?

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