一.闭包的概念
闭包:作用域
闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰
实现信息的驻留(信息的保持,引用在,空间不销毁)
var Person = function(){
var count = 0;
return function getCount(){
console.log(count++);
}
}
var p = new Person();
p();
p();
p();
闭包的缺点:闭包导致内存会驻留,如果是大量对象的闭包环境注意内存消耗
二.练习题
var buttons = [{name:'b1'},{name:'b2'},{name:'b3'}];
function bind(){
for(var i = 0,len=buttons.length;i<len;i++){
buttons[i].onclick = function(){
alert(i);
}
}
}
bind();
buttons[0].onclick();
buttons[1].onclick();
buttons[2].onclick();
function bind(){
for(var i = 0,len=buttons.length;i<len;i++){
(function(num){
buttons[i].onclick = function(){
alert(num);
}
})(i)
}
}
或者:
function bind(){
for(let i = 0,len=buttons.length;i<len;i++){
buttons[i].onclick = function(){
alert(i);
}
}
}
ES6的let关键字也可以创建单独的作用域