javascript - 将变量传递给 setTimeout()
问题描述
我是异步 javascript 的新手。我意识到代码 A 与代码 B 的工作方式相同。
代码 A:
const name = ['a','b','c'];
setTimeout(()=>{
console.log(name);
},1500)
代码 B:
const name = ['a','b','c'];
setTimeout(list=>{
console.log(list);
},1500,name)
- 我们应该使用代码 A 还是代码 B,哪个在异步方面更好?
- 如果我们可以在 setTimeout() 中直接使用在 setTimeout() 之外声明的变量,为什么要将它们作为第三或第四等参数传递给 setTimeout()?
解决方案
您可能想要传递参数的原因是它们是在您创建超时时传递的。例如,考虑以下示例:
const name = ['a','b','c'];
let i = 0;
while (i < name.length) {
setTimeout(function(letter1) {
console.log({letter1});
}, i * 100, name[i]);
setTimeout(function() {
console.log({letter2: name[i], i});
}, i * 1000);
i++;
}
在不传入参数的情况下,到 setTimeout 函数运行时,i
已经是 3,所以你得到undefined
每个console.log
推荐阅读
- java - Java Simple json不替换属性的值
- datepicker - 在 SwiftUI 中手动显示/隐藏 DatePicker 轮
- javascript - 在 React 中单击单选按钮时如何显示 div
- swift - VideoComposition 不遵守说明
- c# - UWP 隐藏 TabView 页脚
- amazon-emr - deprecated.legacy-timestamp 应该如何在 Presto 0.220 中工作?
- javascript - 用户关闭 Chrome 选项卡时的自定义模式
- css - 删除多余的 SCSS 导入会影响编译时间吗?
- ruby-on-rails - Rails 6 图像未在 Heroku 暂存中显示
- spring-boot - Hazelcast 确保成员上的近缓存预加载