账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    块级作用域的疑问
    21
    0

    很普通的一个例子,但是关于let的块级作用域,有一些不明白
    第一个这么写我可以理解:

        var i;
        for(i=0; i<10; i++){
            (function(i){
                var a = document.createElement("a");
                a.innerHTML = i + "<br>";
                a.addEventListener("click", function (e){
                    e.preventDefault();
                    alert(i);//这里的i不是for循环的i,这个是function自己的i,而for循环的i是全局的i。这里的i是随便取的名字,也可以叫num,都行;
                });
                document.body.appendChild(a);
            })(i);
        }

    每次循环一下,就创建一个函数,而把全局的i的当前值赋给函数的参数(局部的),防止全局污染,相当于创建了10个函数

    换成let,可以简单的实现这个功能,但是我就搞不太懂为什么了,虽然不是全局变量了,但是感觉跟全局变量的意思是一样的:

    for(let i=0; i<10; i++){    //用let,因为let有块级作用域,所以就可以了
    
            var a;
            a = document.createElement("a");
            a.innerHTML = i + "<br>";    
            a.addEventListener("click", function (e){
                e.preventDefault();
                alert(i);    
            });
            document.body.appendChild(a);
        }

    i的作用域就是在for里,不再是全局的了, 找当时生成的时作用域,当时传进来的i是多少,这里i就是多少。感觉这样并不能说服我自己,为什么alert(i); i还保持了当时的值呢?for循环不是也早就执行完了吗,咋不是10?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • AI智能解答 超级管理员 2023-04-06 12:111楼
      ``` 块级作用域是指在一个代码块中定义的变量,只能在这个代码块中使用,出了这个代码块就不能被访问到。例如,在一个if语句中定义的变量,只能在if语句中使用,出了if语句就不能被访问到。 ```
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部