一个模板字符串,但考的知识点可不少

314 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

目录

今日题

  1. 题目
  2. 分析 昨日题
  3. 题目
  4. 答案
  5. 解析 结语

今日题

题目

const content = `${{} && 'typeof'}${NaN && `false`}`
console.log(content)

分析

只有两行语句,这应该是有史以来最简单的JS每日一题了吧。还是老规矩,读到这里还没点赞的小伙伴赶紧先点个赞。接下来咱们开始分析,这道题首先得明白&&运算符的使用,不止是&&,比如||!++--等等都要懂得具体的用法。在面对&&时有一个极其简单的口诀"一假则假,全真则真",意思就是只要&&两边有一个是false,那么整个&&就会返回false,如果&&两边都为true,那么就返回true。而||也有一个极其简单的口诀与&&相对应,那就是“一真则真,全假则假”,意思就是只要||两边有一个是true,那么整个||就会返回true,如果||两边全为false,那么就返回false,以上说的是&&||的判断条件,也就是说它们“短路操作”的特性,但在JavaScript中,至于&&||的返回值到底是什么还有待探究。

昨日题

题目

const one = () => console.log(1)
const two = () => console.log(2)
const three = () => setTimeout(() => console.log(3))

one()
three()
two()

答案

1 2 3

解析

首先任务分为同步任务与异步任务,执行代码的顺序也是先执行同步任务再执行异步任务,而异步任务的执行也是有顺序的,是按照放入队列的顺序来依次执行的,因为有eventloop的存在,所以先放入的会先执行,后放入的会后执行。本题当中虽然onetwothree函数都属于同步代码,但他们的函数体却大不相同。函数onetwo的职责是立即执行console.log,所以属于同步代码,而three函数的函数体为一个定时器,定时器的职责为间隔多长时间后执行console.log,因为定时器为异步任务,所以也就导致three函数为异步函数。先执行one函数,输出1;再执行three函数,随后将定时器放入定时器模块中,等到时间到了之后便执行setTimeout中的函数;再执行two函数,输出2;取出异步任务然后执行,输出3。所以本题输出结果为'1 2 3'

结语

此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。
创作不易,少年,就请留个赞再走吧!