作用域链的问题
来源:4-4 变量对象和作用域链
慕小课108
2020-04-07 23:21:56
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>变量、作用域</title>
</head>
<body>
<button>4</button>
<button>5</button>
<button>6</button>
<script type="text/javascript">
// var btns = document.getElementsByTagName('button');
// for (var i = 0; i < 3; i++) {
// btns[i].onclick = function () {
// alert(i + 1);
// };
// }
//在此处修改代码
var btns = document.getElementsByTagName("button");
for(var i = 0,len = btns.length;i < len;i++){;
myChange(i);
}
//这边是怎么运行的?我始终没有搞懂,老师案例讲的我可以看懂,麻烦哪位大神可以告知的??????????????
function myChange(i){
btns[i].onclick = function(){
alert(i + 1);
}
}
</script>
</body>
</html>
1回答
好帮手慕夭夭
2020-04-08
同学你好,参考如下理解:
循环中调用了函数myChange,每一次调用,都会形成一个独立作用域。执行过程如下:
第一次循环,i=0 , myChange(0) 调用函数并传入参数,执行函数里面的代码,给第一个按钮绑定了点击事件;
第二次循环,i=1 , myChange(1) 调用函数并传入参数,执行函数里面的代码,给第二个按钮绑定了点击事件;
第三次循环,i=2 , myChange(2) 调用函数并传入参数,执行函数里面的代码,给第三个按钮绑定了点击事件;
上面调用了三次函数,形成3个独立作用域,就相当于如下:
当点击按钮时,例如点击第一个按钮,那么执行第一个作用域中的事件,事件中获取的i值就是本作用域中传递过来的参数0 。其他的按钮同理,再理解一下哦:
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题