发布于 2026-01-05 4 阅读
0

⭐️互动式 JavaScript 测验 #2 牛油果

⭐️交互式JavaScript测验#2

牛油果

这是JavaScript 小测验系列的第二篇!别忘了看看第一篇哦🥳 在开始这个小测验之前,建议你先阅读一下我之前在 Dev.to 上发表的一些文章!😃

GitHub 标志 lydiahallie / javascript-questions

一系列(高级)JavaScript 问题及其解答✨

当然,这些例子仍然比较简单,并不能展示“最佳/最高效的方法”。有时候,为了展示某些可能出现的行为,并进行相应的解释,我不得不采用某种特定的方式来处理问题🙂

好了,准备好了吗?我们开始吧!


1. 输出结果是什么?

解释

在这段代码片段中,我们有一个person对象和两个箭头函数:` changeAgea` 和 `b` changeAgeAndName。这两个箭头函数都需要一个参数 `a` 。如果我们在调用 `a`或 `b`时x没有为 `a` 提供值(或者提供 `nil` undefined,则 `a` 的值将等于 `nil` xchangeAgechangeAgeAndNamex{...person}

首先,我们调用这个changeAge函数。我们传递一个对象:就是这个person对象!默认变量{ ...person }不会被使用:毕竟我们已经提供了值😊

该函数将持有引用的对象上的属性changeAge值加一。这意味着对象上的该属性值将加一。现在,对象为agex1ageperson
person{ name: "Lydia", age: 22 }

然后,我们调用该changeAgeAndName函数而不提供值。这意味着该函数的值x将等于默认值{ ...person },即一个具有复制person对象属性的新对象{ name: "Lydia", age: 22 }

该函数将属性changeAgeAndName值增加,并将 的值设置age1name"Sarah"

当我们记录person对象时,只会看到changeAge函数所做的修改:{ name: "Lydia", age: 22 }🎉


2. 输出结果是什么?

解释

在这段代码片段中,我们有一个生成器函数 range,它接收一个 `a`start和一个 `b`end值。它遍历 `a`start和 `b`之间的所有值end,并为每个值生成一个已解决的 Promise 🔥

当我们调用立即调用函数时,我们将变量设置gen为生成器函数返回的迭代器range

如果我们手动调用迭代器next上的方法gen,我们会看到指定范围内值的已解析 Promise1 。我们将这些值传递给了 `resolve` 方法3,这意味着当我们遍历迭代器时,它首先返回 `1` Promise {1},然后Promise {2}返回 `2`,最后返回 `3` Promise {3}

我们可以用循环遍历迭代器返回的值for..in。这样,我们就不用next()每次都手动调用该方法了😃

我们希望获取每个 Promise 的已解析值awaiting。我们可以通过循环遍历每个 Promise 来实现这一点for await .. in

通过for await...in循环,我们可以遍历迭代器和await每个值。通过等待已解决的 Promise,已解决的值将被返回:1,,2以及3本例中的 💪🏼


3. 输出结果是什么?

解释

我们调用该getInfo函数。在该函数的第一行,我们试图记录randomValue变量的值。

在这段代码片段中,我们看到两个名为 `a` 的变量randomValue,它们都使用 `@var` 关键字声明const。使用 `@ constvar` 关键字声明的变量是块级作用域的,只有在实际声明它们的代码行执行到该行时才会初始化

在函数内部getInfo,我们尝试访问randomValue声明变量之前的块级作用域。块级作用域中尚未初始化的变量区域被称为暂时的死区。当我们尝试引用一个未初始化的变量时(例如尝试使用 `log` 语句)typeof randomValueReferenceError就会抛出异常!❌


怎么样?你三个都答对了吗?如果答对了,太棒了!🎉 如果答错了,也完全不用担心!

希望这些解释能对你有所帮助,下次遇到看似“出乎意料”的行为时,可以把这些新信息考虑进去🙂

欢迎随时联系我!

推特 👩🏽‍💻 Instagram 💻 GitHub 💡 LinkedIn 📷 YouTube 💌电子邮件
文章来源:https://dev.to/lydiahallie/interactive-javascript-quiz-2-4pi1