zonglang / code

平时写的代码练习
1 stars 0 forks source link

闭包 #7

Open zonglang opened 5 years ago

zonglang commented 5 years ago

什么是闭包

闭包是指函数和声明该函数的词法环境(作用域)的组合

闭包 = 函数 + 可以访问的变量

所有函数都是闭包?

自由变量:指在函数中使用,但既不是函数参数,也不是函数的局部变量的变量

  • 从理论上来说,所有函数都是闭包

因为所有的函数在创建的时候,都将上层上下文的数据保存起来了,在函数中访问全局变量就相当于是在访问自有变量。

闭包的实践

  1. 闭包模拟私有方法或变量

    将方法或变量声明为私有,只有同类中的其他公有方法能调用

    
    var Counter = (function() {
    var privateCounter = 0;
    function changeBy(val) {
    privateCounter += val;
    }
    return {
    increment: function() {
    changeBy(1);
    },
    decrement: function() {
    changeBy(-1);
    },
    value: function() {
    return privateCounter;
    }
    }   
    })();

console.log(Counter.value()); / logs 0 / Counter.increment(); Counter.increment(); console.log(Counter.value()); / logs 2 / Counter.decrement(); console.log(Counter.value()); / logs 1 /


2. 循环中的闭包:一个常见的错误