Open zonglang opened 5 years ago
闭包是指函数和声明该函数的词法环境(作用域)的组合
闭包 = 函数 + 可以访问的变量
自由变量:指在函数中使用,但既不是函数参数,也不是函数的局部变量的变量 从理论上来说,所有函数都是闭包
自由变量:指在函数中使用,但既不是函数参数,也不是函数的局部变量的变量
因为所有的函数在创建的时候,都将上层上下文的数据保存起来了,在函数中访问全局变量就相当于是在访问自有变量。
将方法或变量声明为私有,只有同类中的其他公有方法能调用 var Counter = (function() { var privateCounter = 0; function changeBy(val) { privateCounter += val; } return { increment: function() { changeBy(1); }, decrement: function() { changeBy(-1); }, value: function() { return privateCounter; } } })();
将方法或变量声明为私有,只有同类中的其他公有方法能调用
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. 循环中的闭包:一个常见的错误
什么是闭包
闭包是指函数和声明该函数的词法环境(作用域)的组合
所有函数都是闭包?
因为所有的函数在创建的时候,都将上层上下文的数据保存起来了,在函数中访问全局变量就相当于是在访问自有变量。
闭包的实践
console.log(Counter.value()); / logs 0 / Counter.increment(); Counter.increment(); console.log(Counter.value()); / logs 2 / Counter.decrement(); console.log(Counter.value()); / logs 1 /