JavaScript语言精粹(二)— 闭包

什么是闭包?

官方说法:是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

简化说法:

一个函数A里面定义另一个函数B,函数B即为闭包。

functon A(){
    ...
    function B(){
        ...
    }
}
闭包的特点?
  • 嵌套在容器函数(A)内部的嵌套函数(B)只能在容器函数(A)内被访问
  • 嵌套函数(B)继承了容器函数(A)的变量,但是 B 函数中的变量只有它自己能访问,也就是嵌套函数(B)的作用域包含容器函数(A)的作用域。
  • 闭包保存变量

        function A(a){
            function B(b){
                return a + b;
            }
            return B;
        }
        var C = A(1);
        var result = C(2);
        console.log(result);//输出结果 3
    函数B形成一个闭包,被调用后返回函数B的引用C,执行C后输出3,因为调用A传进去的1并没有因为A的调用完成而销毁,而是被保存起来。
    当B没有再被引用后销毁。
    
  • 闭包命名冲突,就近原则。

    function A(){
        function B(num){
            var c = 10;//内部变量 c
            return num + c;
        }
        return B;
    }
    
    var c = 20;//外部变量c
    var result = A()(c);
    console.log(c);//20 
    console.log(result)//30 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值