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

你可能感兴趣的文章
Objective-C实现二进制补码算法(附完整源码)
查看>>
Objective-C实现二进制计数尾随零算法(附完整源码)
查看>>
Objective-C实现二进制计数设置位算法(附完整源码)
查看>>
Objective-C实现二进制转八进制算法(附完整源码)
查看>>
Objective-C实现二进制转十六进制算法(附完整源码)
查看>>
Objective-C实现二项式堆binomial heap算法(附完整源码)
查看>>
Objective-C实现互斥量 (附完整源码)
查看>>
Objective-C实现互斥锁同步执行两个线程函数(附完整源码)
查看>>
Objective-C实现交易密码算法(附完整源码)
查看>>
Objective-C实现亨元模式(附完整源码)
查看>>
Objective-C实现人工势场法(附完整源码)
查看>>
Objective-C实现人民币金额转换成大写中文(附完整源码)
查看>>
Objective-C实现人物动画移动效果(附完整源码)
查看>>
Objective-C实现从给定的子串列表返回包含所有可能的列表算法(附完整源码)
查看>>
Objective-C实现代理服务器(附完整源码)
查看>>
Objective-C实现代理模式(附完整源码)
查看>>
Objective-C实现令牌桶算法(附完整源码)
查看>>
Objective-C实现以数组形式返回斐波那契数列fibonacci算法(附完整源码)
查看>>
Objective-C实现以递归的形式MatrixExponentiation矩阵求幂算法 (附完整源码)
查看>>
Objective-C实现以递归的方式实现十进制转二进制算法(附完整源码)
查看>>