博客
关于我
算法系列1--js数组排序
阅读量:346 次
发布时间:2019-03-03

本文共 635 字,大约阅读时间需要 2 分钟。

在原来的代码中,使用var声明的i变量在setTimeout函数内部会受到外部变量的引用问题影响,导致所有的setTimeout回调都使用了最后一次循环中的i值。以下是优化后的代码,能够正确输出0到9:

解决方案一:

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

解决方案二:

for (let i = 0; i < 10; i++) {    setTimeout(() => {        console.log(i);    }, 1000);}

解决方案三:

for (var i = 0; i < 10; i++) {    setTimeout((i) => {        console.log(i);    }, 1000, i);}

解决方案四:

for (var i = 0; i < 10; i++) {    ((j) => {        setTimeout(() => {            console.log(j);        }, 1000);    })(i);}

这些方法都通过不同的方式确保setTimeout回调中使用的i值是当前循环中的值,而不是最后一次循环中的值,从而能够正确输出0到9。

转载地址:http://opyq.baihongyu.com/

你可能感兴趣的文章
phpmailer的用法
查看>>
phpmyadmin 安装
查看>>
phpmyadmin导出数据库出现Fatal error: Cannot 'break' 2 levels in D:\phpstudy\WWW\phpMyAdmin
查看>>
phpmyadmin数据库建表及插入
查看>>
phpnow配置
查看>>
phprpc简单使用
查看>>
phpspider中当爬虫获取数据时如何去掉广告
查看>>
phpstorm 2016.3.3 激活
查看>>
phpstorm中Xdebug的使用
查看>>
phpstorm中使用svn版本控制器
查看>>
phpstorm配置php脚本执行
查看>>
PhpStorm配置远程xdebug
查看>>
phpstudy+iis搭建php项目
查看>>
phpStudy安装教程
查看>>
phpstudy搭建网站,通过快解析端口映射外网访问
查看>>
phpunit
查看>>
PHPUnit单元测试对桩件(stub)和仿件对象(Mock)的理解
查看>>
phpweb成品网站最新版(注入、上传、写shell)
查看>>
phpWhois 项目推荐
查看>>
Redis事务详解,吃透数据库没你想的那么难
查看>>