JavaScript变量复制范围

 0704034铜豌豆 发布于 2023-02-11 17:37

我有两个代码块,我相信它们会产生相同的结果:

1。

for(var i=0;i<10;i+=1){
    var j=i;
    setTimeout(function(){
        console.log(j);
    },100);
}

2。

for(var i=0;i<10;i+=1){
    (function(j){
        setTimeout(function(){
            console.log(j);
        },100);
    })(i);
}

但是,正如您大多数人所期望的那样,第一个记录为10的9次,第二个记录为0到9的正确日志。

第二个是使用闭包保留i的值。我认为第一个也应保留其价值,因为:

    var j创建每个迭代一个新的变量j。

    在迭代中将当前i值分配给此新值j

    j然后,此新对象将setTimeout在同一迭代中绑定到的函数。

    下次迭代会将新的j绑定到该迭代中的函数。

但是事实证明,对于所有迭代,都j绑定到最后一个i值。

那么,使用function参数和创建变量之间的区别是什么var

请指出任何错误!提前致谢 !


谢谢你们 !我不知道javascript仅具有功能和全局作用域!怪其他教我这样做的语言:P

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有