七个简单但棘手的 JS 面试问题[每日前端夜话0xD4]
疯狂的技术宅 前端先锋
每日前端夜话0xD4
每日前端夜话,陪你聊前端。
每天晚上18:00准时推送。
正文共:1952 字
预计阅读时间:10 分钟
作者:Patricia Neil
翻译:疯狂的技术宅
来源:dmitripavlutin
在软件开发中,我认为最需要注意的是:
- 编码面试
- 有毒的主管或猪队友
不是 JavaScript,this,CSS,IE 浏览器,而是上述两点!
如果你参加 JavaScript 高级开发面试,那么很有可能在编码面试中被问到一些棘手的问题。
我知道这是不公平的。一些不知名的人将你放在一边来审视你。这并不是令人愉快的经历。
求职面试
你能做些什么?
请遵循以下建议:“通过实践变得完美”。通过投入足够的时间(最好地定期进行)来深入了解 JavaScript,可以改善你的编码,并且作为积极的结果,可以改善面试技巧。
在本文中,你将发现 7 个简单而又棘手的 JavaScript 面试问题。
尽管这些问题看上去似乎比较随意,但它们涉及了 JavaScript 的重要概念。所以你最好在下次面试之前进行练习!
1. 意外的全局变量
问题
在以下代码段中, typeof a 和 typeof b 的评估结果是什么:
1function foo() {
2 let a = b = 0;
3 a++;
4 return a;
5}
6
7foo();
8typeof a; // => ???
9typeof b; // => ???
答案
让我们仔细看看第2行:let a = b = 0。该语句声明了局部变量 a。但同时它也声明了 全局 变量 b。
在 foo() 或全局作用域中都没有声明变量 b。因此,JavaScript 将 b = 0 表达式解释为 window.b = 0。
意外的全局变量JavaScript
b 是意外创建的全局变量。
在浏览器中,以上代码片段等效于:
1const clothes = ['jacket', 't-shirt'];
2clothes.length = 0;
3
4clothes[0]; // => ???
typeof a 是 'undefined'。变量 a 仅在 foo() 作用域内部声明,而在作用域外部中不可用。
typeof b 的结果为 'number'。b 是值为 0 的全局变量。
2. 数组长度属性
问题
clothes[0] 的值是什么:
1const clothes = ['jacket', 't-shirt'];
2clothes.length = 0;
3
4clothes[0]; // => ???
答案
数组对象的 length 属性具有特殊行为(http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-array-instances-length):