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

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

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

[[331133]]

问题1:数组排序比较

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

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

答案 

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

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

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

问题2:对象可变性

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

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

答案

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

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

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

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

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

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

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

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

问题3:递归

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

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

答案

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

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

问题4:范围

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

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

答案

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

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

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

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

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

答案

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

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

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

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

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

最后

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

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2020-04-06 12:20:51

Vim文本编辑器Linux

2020-11-02 00:27:31

云端云计算机器学习

2020-12-14 06:46:36

shell脚本命令

2020-08-04 08:30:18

JS数组技巧

2017-06-13 14:30:13

5GQoS网络体系结构

2014-03-04 09:35:45

JavaScript调试

2020-03-05 21:40:49

Javascript前端

2020-03-05 08:58:42

JavaScript语言开发

2020-11-02 15:49:35

机器学习技术云计算

2020-09-01 13:10:42

JavaScript开发 技巧

2020-06-17 08:12:05

Kubernetes容器

2020-04-03 19:21:59

JavaScript编程语言开发

2017-11-06 13:36:05

人工智能AI企业

2014-02-14 09:16:51

JavaScript工具

2020-05-28 10:15:06

语音技能服务提供

2020-06-01 14:33:27

语音技能智能

2009-11-06 14:05:11

全国网管技能水平考试金牌网管师

2020-12-02 14:54:41

JavaScript开发技术

2021-01-10 23:36:52

SQL数据库技术

2017-04-21 14:06:42

开发程序员编程
点赞
收藏

51CTO技术栈公众号