JavaScript闭包理解

什么是闭包

普通函数中,函数内部可以直接读取全局变量,函数外部无法读取函数内部的局部变量。

而闭包能够读取其他函数内部变量的函数,由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成 “定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包的用途:

  • 可以在函数外部读取函数内部成员

让函数内成员始终存活在内存中

一些关于闭包的例子

示例1:

 function fn() {
            var n = 10;
            function fn_son() {
                console.log(n);  
            }
        }
//函数fn_son被包括在函数fn内部,这时fn内部的所有局部变量对fn_son都是可见的。
但是反过来就不行,fn_son内部的局部变量对fn是不可见的。

示例2:

function fn1() {
            var n = 100;
            return function fn1_son() {
                var a = 50;
                return a;
            }
        }
        var f1 = fn1();
        console.log(f1()); 
//将内部函数作为返回值,此时会在控制台打印50,此时fn1函数可以访问到内部函数fn1_son的局部变量a

示例3:

function getRandom() {
            var random = parseInt(Math.random() * 10 + 1);
            return function() {
                return random;
            }
        }
        var fn = getRandom();
        console.log(fn());
//可以说 闭包就是在一个函数内可以访问另一个函数内的局部变量
//上述代码段结果是在控制台 随机打印一个(0-9)之间的值

 

注意点

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

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

3.闭包只能取得包含函数中任何变量的最后一个值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值