闭包的概念Closure:作用域
引用了自由变量的函数,这个被引用的自由变量将和这个函数一同存在;
即使已经离开了创造它的环境也不例外。
所以,闭包是由函数和其他相关的引用环境组合而成,实现信息驻留;
信息的保存,引用在,空间不销毁
简单的使用
var Person = function () {var count = 0;return function () {return count++;};
};var p = Person()
console.log(p()); // 0
console.log(p()); // 1
console.log(p()); // 2
闭包的应用
var buttons = [{name: 'n1'}, {name: 'n2'}, {name: 'n3'}]function bind() {for (var i = 0; i < buttons.length; i++) {// 定义一个立即执行函数,行成闭包(function (num) {buttons[i].func = function () {console.log(num);};})(i);}
}bind();buttons[0].func(); // 0
buttons[1].func(); // 1
buttons[2].func(); // 2
闭包缺点:
闭包导致内存驻留,如果是大量对象的闭包环境需要注意内存消耗
ES6中使用let定义局部变量也可以实现输出0 1 2
function bind() {for (let i = 0; i < buttons.length; i++) {buttons[i].func = function () {console.log(i);};}
}