宝哥软件园

送你43道JS面试题(收藏)

编辑:宝哥软件园 来源:互联网 时间:2021-08-22

引导阅读

在过去的两天里,GitHub Trending存储库被一个名为javascript-questions的项目所主导,该项目记录了一些javascript主题。

我从头到尾都看了,都是基础题。我花了大约半个小时(有些问题很简单,可以一扫而光)才做完这些题。虽然问题很简单,但每个问题对应一个知识点。如果你没有触及这个知识点,你肯定会犯错。如果你接触过这些知识点,那么这些问题对你来说很容易。

建议大家花半个小时去做,这样可以检查和填补空白。

我花了几个小时把它们翻译成中文,这当然是作者授权的。

本文作者的解释是不完整的。为了更好的理解,我加了一些个人的解释。

仓库地址:https://github.com/lydiahallie/javascript-questions

JavaScript高级问题列表

我在我的Instagram上贴了一个日常的JavaScript选择题,我就贴在这里!

从基础到高级:测试你对JavaScript的理解,刷新你的知识,或者为你的编码面试做准备!我每周都会用新问题更新这个项目。

答案位于问题下方的折叠部分,只需点击即可展开。祝您好运

1.以下代码的输出是什么?

函数SayHi(){ console . log(name);console.log(年龄);var name=' Lydia让年龄=21岁;} SayHi();A:莉迪亚和未定义

B: Lydia和ReferenceError

C:参考箭头和21

D:未定义和引用错误

回答: D

在函数中,我们首先用var关键字声明名称变量。这意味着变量将在创建阶段被提升(JavaScript将在创建变量的创建阶段为其分配内存空间),默认值是未定义的,直到我们实际执行使用该变量的行。我们还没有给名称变量赋值,所以它仍然保留未定义的值。

用let关键字(和const)声明的变量也有变量升级,但与var不同,初始化不会升级。在我们声明(初始化)它们之前,它们是不可访问的。这被称为“临时死区”。当我们试图在声明变量之前访问它时,JavaScript会抛出一个ReferenceError。

译者注:

为什么我们用下面的例子来验证let中是否有变量提升:

Let name=' conardli ' { console.log (name)//unsightreferenceerror : name未定义let name=' code secret garden' }let变量如果没有变量提升,console . log(name)将输出ConardLi,但结果会抛出一个referenceerror,它显示let也有变量提升,但它有一个“临时死区”,在变量初始化或赋值之前不允许访问。

变量的分配可以分为三个阶段:

创建变量,在内存中创建空间来初始化变量,并将变量初始化为未定义。关于字母、变量和函数:

信件“创建”过程有所改进,但初始化没有改进。var的“创建”和“初始化”得到推进。该功能的“创建”、“初始化”和“分配”都得到了提升。2.以下代码的输出是什么?

for(var I=0;I 3;i ) { setTimeout(()=console.log(i),1);}for(让I=0;I 3;i ) { setTimeout(()=console.log(i),1);}A: 0 1 2和0 1 2

B: 0 1 2和333

C: 3 3 3和0 1 2

答案:C

由于JavaScript中的事件执行机制,当setTimeout函数实际执行时,循环已经结束。由于第一个循环中的变量I是用var关键字声明的,因此该值是全局的。在循环过程中,每次我们使用一元运算符时,我们都会将I的值增加1。因此,在第一个例子中,当调用setTimeout函数时,我被赋值为3。

在第二个循环中,变量I用let关键字声明:用let(和const)关键字声明的变量具有块效应

更多资讯
游戏推荐
更多+