首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

问题来了!5个JavaScript问答测试你的技能熟练程度

今天,我们将继续学习我们钟爱的JavaScript语言,在此文章中,我们将通过回答一些JavaScript迷你挑战来测试我们的技能。即使我在每个问题的末尾都给出了解释并给出答案,也请尝试自己先找出答案,然后再针对我的问题验证你的答案。

问题1:数组排序比较

思考以下数组和条件,你认为结果如何?

答案

现在我们知道了结果,让我们解释一下原因。对于前两个输出,说明非常简单,该sort()方法对原始数组进行排序并返回对相同对象arr1.sort()的引用,因此实际上是对相同对象的引用arr1。

对于第三个输出,arr1.sort() === arr2.sort()即使每个数组上的元素相同,=== 也不会测试数组的元素,而是测试每个对象的引用(在这种情况下是不同的),因此返回false。

问题2:对象可变性

对于这种情况,我想模拟一个代表作者的对象以及有关他的网站的信息。然后,我们使用这个方法,Object.freeze()以便无法对其进行更改,并将其进行测试。你认为结果如何?

答案

如果你做对了,恭喜!如果没有,请不要担心。让我们解释发生了什么。当我们调用该方法时,Object.freeze()冻结了对象,这意味着不能再更改对象;冻结对象可以防止向其添加新属性,也可以防止现有属性被删除或更改。

但是,为什么我们能够更改对象?实际上我们没有,这就是窍门。出于各种目的,可变author网站中是对对象的引用,并且该引用在整个代码中保持不变。我们确实更改了website对象内部的一个属性,但这并没有更改对对象本身的引用。

如果你想知道如果尝试更改author对象的属性会发生什么,那么有两种可能的答案。让我们从第一个开始:

在第一种情况下,即使我们更改属性,name也没有真正更改,也没有错误,没有警告,就像那行代码永远不会执行一样。第二种答案是在严格模式下

在严格模式下,如果尝试修改冻结的对象,则会得到TypeError。比以前好多了。

问题3:递归

给定以下递归函数,当我们使用“ blog”作为参数调用它时,你认为结果是什么?

答案

对于这个问题,没有技巧,只是递归函数的基本用法,它将继续调用自身,直到字符串中只有一个元素为止str,在这种情况下,将打印原始字符串的最后一个字符g。递归函数很重要,并且可以通过非常有趣的方式解决问题,因此理解它们很重要。

问题4:范围

你认为控制台的输出是什么,为什么?

答案

但是,如何在封闭函数的范围之外b进行定义?诀窍是,最多是一个全局变量。但仍保留在功能的封闭之下。请注意,在严格模式下,这将生成一个ReferenceError: b is not defined。

问题5:有关闭包的更多信息

以下代码段是一个实际的流行访谈问题,问题是,你认为输出结果是什么?

答案

答对了吗?这样做的原因是,在循环中执行的每个函数都将在整个循环完成后执行,因此所有函数都将引用存储在中的最后一个值i,即5。闭包可以通过为每次迭代创建一个唯一的作用域,将变量的每个唯一值存储在其作用域中来防止此问题,如下所示:

ES2015提供的另一个选项是使用let代替var:

最后

希望你能像我一样开心并从中学到东西,这是一篇特别有趣的文章,将来我可能会做更多这样的事情。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200623A06Q2N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券