博客
关于我
算法系列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/

你可能感兴趣的文章
SQL-CLR 类型映射 (LINQ to SQL)
查看>>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
查看>>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
查看>>
org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded
查看>>
org.tinygroup.serviceprocessor-服务处理器
查看>>
org/eclipse/jetty/server/Connector : Unsupported major.minor version 52.0
查看>>
org/hibernate/validator/internal/engine
查看>>
Orleans框架------基于Actor模型生成分布式Id
查看>>
SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
查看>>
ORM sqlachemy学习
查看>>
Ormlite数据库
查看>>
orm总结
查看>>
os.environ 没有设置环境变量
查看>>
os.path.join、dirname、splitext、split、makedirs、getcwd、listdir、sep等的用法
查看>>
os.removexattr 的 Python 文档——‘*‘(星号)参数是什么意思?
查看>>
os.system 在 Python 中不起作用
查看>>
OS2ATC2017:阿里研究员林昊畅谈操作系统创新与挑战
查看>>
OSCACHE介绍
查看>>
SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum
查看>>
OSChina 周五乱弹 ——吹牛扯淡的耽误你们学习进步了
查看>>