网站首页 > 技术文章 正文
今天有事外出,所以就挑简单的来讨论 ——
定时器 setTimeout
定时器在面试题中经常出现,都是搭配来考察其他相关知识的。
定时器
下列代码会在控制台输出什么?
点击下面小程序可以浏览完整题目和选项。
上面是一道经典的题目,主要用于考察 JavaScript 的作用域和事件队列。
当执行 for 循环时候,调用 setTimeout 异步函数,将其中的回调函数推到事件队列中等待执行。
此时回调函数的执行时间,被设定为从 0s 到 4s。
又因为通过 var 声明的 i 变量并不是在 for 循环中,而是在声明的方法体内,在例子中是则是在全局作用域。
所以在 for 循环执行结束后,全局作用域的 i = 5
而到队列任务执行时,所有队列任务中执行的 console.log(i) 中都是访问全局函数中的 i。
所以结果就是:每隔 1 秒,控制台输出一个 5。
闭包
而想按顺序输出 1 到 5,以前会使用闭包。
上面通过声明一个自执行的匿名函数,当循环时候,创建出 5 个闭包,每个闭包内的变量 i是循环时传进去的 i 值。
当队列任务被调用时,console.log(i) 为对应的闭包内的变量 i。
let
在 ES6 中,通过关键字 let,可以创建出块级作用域。产生和闭包一样的效果。
定时器参数
观察下列代码,控制台会怎样的输出呢?
控制台会立即输出 0 至 4。而不是间隔 1 秒输出 0 到 4。
因为 console.log(i) 已经是调用函数的形式,而不是一个函数句柄。所以在执行循环时候,就同时执行 console.log(i)。
那么,应该怎样修改呢?
setTimeout() 首个参数接收回调函数,第二个参数接收延时时间。
我们可能会忽略,setTimeout() 的后续参数都是作为附加参数,在定时器到期时候,传到回调函数中。
所以,只需要在附加参数中传进 i 即可。
结语
今天的内容较为简单,可能很多朋友都已经了解。这些都算是面试中的开胃菜,不得不会,千万别阴沟里翻船。
觉得不错的帮忙点个赞吧,欢迎评论区讨论。
猜你喜欢
- 2025-06-24 服务端性能测试实战3-性能测试脚本开发
- 2025-06-24 跨标签页通信(六):Cookie(cookie跨页面)
- 2025-06-24 崩溃!代码总掉链子?6 个 JavaScript 技巧助你稳操胜券
- 2025-06-24 如何取消一个已经开始的 JavaScript Promise
- 2025-06-24 Web页面如此耗电!到了某种程度,会是大损失
- 2025-06-24 setTimeout 出大 bug?为什么需要 setBigTimeout?
- 2025-06-24 悠然!午休十分钟分清 Vue 的 watch 和 computed,面试不发怵
- 2025-06-24 科普:CPU空闲时在忙什么?(cpu空闲温度)
- 2025-06-24 html5大神结合js带你研究古老读心术,你的心思早被猜透
- 2025-06-24 JWT + Refresh + SSO模版(jwt demo)
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 566℃Oracle分析函数之Lag和Lead()使用
- 564℃几个Oracle空值处理函数 oracle处理null值的函数
- 549℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 545℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 543℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 518℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)