<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<ul id="todo-app">
<li class="item">Walk the dog</li>
<li class="item">Pay bills</li>
<li class="item">Make dinner</li>
<li class="item">Code for one hour</li>
</ul>
<script type="text/javascript">
var items = document.getElementsByClassName('item');
/*因为在for循环里面指定给items[i].onclick的事件处理程序,也就
是onclick那个匿名函数是在for循环执行完成后(用户单击链接时)才被
调用的。而调用时,需要对变量i求值,解析程序首先会在事件处理程序内
部查找,但i没有定义。然后,又到方法外部去查找,此时有定义,但i的值
是4(只有i大于4才会停止执行for循环)。因此,就会取得该值——这正是
闭包(匿名函数)要使用其外部作用域中变量的结果。而且,这也是由于匿
名函数本身无法传递参数(故而无法维护自己的作用域)造成的。*/
for(var i = 0; i < items.length; i++) {
items[i].onclick = function() {
alert(i) //4,4,4,4
alert(this.innerHTML)
}
}
/*for(var i = 0; i < items.length; i++) {
items[i].index = i;
items[i].onclick = function() {
alert(this.index) //0,1,2,3
alert(this.innerHTML)
}
}*/
/*for(var i = 0; i < items.length; i++) {
(function() {
console.log(i) //一次输出0,1,2,3
var p = i
console.log(p) //一次输出0,1,2,3
items[i].onclick = function() {
console.log(i) //4,4,4,4
alert(p); //0,1,2,3
}
})();
}*/
/*for(var i = 0; i < items.length; i++) {
(function(i) {
console.log(i)//一次输出0,1,2,3
items[i].onclick = function() {
console.log(i)//0,1,2,3
}
})(i);
}*/
</script>
</body>
</html>
js作用域(一)
最新推荐文章于 2022-05-18 09:40:09 发布