🌟 闭包
//循环遍历,给每个按钮都绑定上单击响应函数
var btns = document.getElementsByTagName("button");
for(var i = 0; i< btns.length; i++){
//这样写会有一个问题,btns是一个伪数组,其中并不包含length属性,所以每次循环都是在单独计算长度
};
//可以修改为:
for(var i = 0; length= btns.length; i<length; i++){
//提前提取出length的数值,以免重复计算
var btn = btns[i];
//将btn对应的索引保存在对应的btn上
btn.index = i;
btn.onclick = function(){
alert("这是第"+ (this.index+1)+"个");
}
}; //函数在for循环执行之后才单击执行,所以只会显示for循环执行后的i的数值
//也可以利用闭包
for(var i= 0 length = btn.length; i<length; i++){
(function(i){
var btn = btn[i];
btn.onclick = function(){
alert("这是第"+ (i+1)+"个");
};
})(i); //匿名函数立即调用
};
1.如何产生闭包?
当一个嵌套的内部函数引用了嵌套的外部函数的变量时,就产生了闭包。
function fn1(){
var a = 2;
function fn2(){
console.log(a);
};
};
fn1();
//fn2引用了fn1的变量,所以产生了闭包
2. 闭包到底是什么?
闭包是嵌套的内部函数,即fn2(多数人的理解);闭包包含被引用变量的对象,即fn2中的closure。(少数人的理解)
闭包存在于嵌套的内部函数中。
3. 产生