关于定时器第一个参数引号的问题

Olivert_Vz 2018-11-18 05:41:41


setTimeout是异步的,所以输出10个0是正常情况。可为什么不加引号就变成1到9了。
第一个参数加不加引号不是只影响捕捉局部变量或者全局变量吗
...全文
57 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2018-11-18
  • 打赏
  • 举报
回复
setTimeout的第一个参数要么是字符串,要么是一个函数的引用地址。 你 console.log(i) 是直接执行的方法,不是函数的引用地址。 是先执行console.log(i),再把console.log(i)的返回值(也就是undefined)传给setTimeout的第一个参数。 你应该是这样 for (let i = 0; i < 10; i++) setTimeout(function(){console.log(i)}, 0); 不过这样在谷歌浏览器中还是会输出0到9,因为在谷歌浏览器中for用let块作用域变量时,每次循环都会创建一个新的循环变量,并因为闭包的关系保存。

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧