美文网首页
什么是闭包?

什么是闭包?

作者: 南柯一i梦 | 来源:发表于2017-10-20 21:19 被阅读0次

    闭包的使用在许多高级程序都能够有用到。

    闭包就是一个函数引用另一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会增加内存消耗。

    由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。或者说闭包就是子函数可以使用父函数的局部变量,还有父函数的参数。

    变量的作用域

    要理解闭包,首先必须理解Javascript特殊的变量作用域。

    变量的作用域无非就是两种:全局变量和局部变量。

    //变量声明时如果不使用var关键字,那么它就是一个全局变量,即便它在函数内定义。

    所有函数都能访问全局变量。

    实际上,在 JavaScript 中,所有函数都能访问它们上一层的作用域。

    JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。

    使用闭包的注意点

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

    2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

    闭包的概念

    function f1(){

    var n=999;

    function f2(){

    alert(n);

    }

    return f2;

    }

    var result=f1();

    result(); // 999

    上一节代码中的f2函数,就是闭包。

    各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。

    由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。

    所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

    相关文章

      网友评论

          本文标题:什么是闭包?

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