js作用域(一)

<!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>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值