如果你符合JavaScript高级开发人员的资格,在编码面试中很有可能会被问到一些刁钻的问题。
我知道这不公平。一些不知名的人把你放在角落上下打量,似乎想看你是什么做成的。这是一次不愉快的经历。
你能做什么?
遵循这个建议:“熟能生巧”。通过投入足够的时间,更好地定期深入了解JavaScript,将改善你的编码,并顺便提高你的面试技巧。
在这篇文章中,你会发现7个乍一看很简单,但实际上很棘手的JavaScript面试题。
虽然一开始这些问题看起来是随机的,但是它们试图与JavaScript的重要概念挂钩。所以你最好在下次面试前练习一下!
1. 意外的全局变量
问题
在以下代码中,typeof a
和typeof b
的值分别是什么:
答案
让我们仔细看看第2行:let a = b = 0
。这个语句确实声明了一个局部变量a
。但是,它确实声明了一个全局变量b
。
在foo()
作用域或全局作用域中都没有声明变量 b
”。因此JavaScript将表达式 b = 0
解释为 window.b = 0
。
b
是一个偶然创建的全局变量。
在浏览器中,上述代码片段相当于:
2. 数组 length 属性
因为 length
的这种行为,当JavaScript执行clothes.length = 0
时,数组 clothes
中的所有项都被删除了。
clothes[0]
是undefined
,因为 clothes
数组被清空了。
答案
让我们仔细看看出现在左花括号{
前面的分号;
:
很容易忽略这个分号,而它创建了一个空语句。空语句是不做任何事情的语句。
for()
在空语句(什么也不做)上循环了 4 次,忽略了实际上往数组里添加元素的代码块{ numbers.push(i + 1); }
。
上述代码等同于:
for()
递增变量i
直到4
。然后JavaScript 进入代码块 { numbers.push(i + 1); }
,将4 + 1
添加 到numbers
数组中。
这样 numbers
就是 [5]
.
更多Java精讲
4. 自动插入分号
查看Java精讲 获取更多