4月13日--闭包的发生与解决
1、闭包发生:在一个函数内部定义函数时,内部函数使用了外部函数的局部变量
闭包的解决方法1:IIFE(立即执行函数表达式immediately invoke function expression)
(function(n){
*****
})(i)
onload=function(){
var btns=document.getElementsByTagName("button");
for(var i=0;i<btns.length;i++){
(function(n){
btns[n].onclick=function(){
console.log("btn click:"+n);
};
})(i);
}
};
闭包的解决2:在外部绑定
onload = function () {
var btns = document.getElementsByTagName("button");
for(var i = 0; i < btns.length; i++){
bindClick(btns[i],i);
}
};
function bindClick (btn,index) {
btn.onclick = function () {
console.log("second btn click:"+index);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>闭包closure</title>
<script type="text/javascript">
// 闭包发生:在一个函数内部定义函数时,内部函数使用了外部函数的局部变量
//闭包的解决1:IIFE(立即执行函数表达式immediately invoke function expression)
// onload=function(){
// var btns=document.getElementsByTagName("button");
// for(var i=0;i<btns.length;i++){
// (function(n){
// btns[n].onclick=function(){
// console.log("btn click:"+n);
// };
// })(i);
// }
// };
//闭包的解决2:在外部绑定
onload = function () {
var btns = document.getElementsByTagName("button");
for(var i = 0; i < btns.length; i++){
bindClick(btns[i],i);
}
};
function bindClick (btn,index) {
btn.onclick = function () {
console.log("second btn click:"+index);
}
}
</script>
</head>
<body>
<button>btn1</button>
<button>btn2</button>
<button>btn3</button>
</body>
</html>
浙公网安备 33010602011771号