前言
我准备写一个面试题系列,每篇文章不用太多,就三道题,尽量用笔试题去写文章,然后就能串联很多知识点
希望大家看了面试题,多多评论缺点,我会更好的改进,你的评论就是我最大的创作动力
1. 箭头函数
const obj = {
name: "Viktor",
getName: () => this.name
}
console.log(obj.getName()) // result ?
错误答案: "Viktor"
正确答案: undefined
解释
箭头函数没有自己的this的,使用的时候需要bind绑定this,如果没有绑定this,那么他的this会继承父作用域的this,现在父作用域的this为在浏览器中为window,在node中为global,而window或者global未定义name值,所以打印为undefined
2. const声明
const score = 10;
if (score < 100) {
const result = "Not Passed";
}
console.log('result', result);
错误的答案: "Not Passed”, undefined, null
正确的答案: ReferenceError: result is not defined
解释
const是块级作用域。什么是块?所谓块就是我们用大括号定义的代码区域,就像这样
//outer block scope
{//inner block-scope
const name = "Viktor";
}
//outer block scope
使用const定义的变量拥有块级作用域,将其范围限制在声明他的语句和表达式,所以在块外面是不能读到他的
3. setImmediate() vs setTimeout()
// timeout_vs_immediate.js
setTimeout(() => {
console.log('timeout');
}, 0);
setImmediate(() => {
console.log('immediate');
});
将会输出什么结果
错误答案:
timeout
immediate
和
immediate
timeout
正确答案: 以上的输出是不可预测的
解释
定时器的执行顺序依赖于调用他们的上下文,如果他们两个是在主模块(不是I/O)模块里面被调用的话,那么他们的执行顺序是不确定的,你是不是疑问变得更多了,关于这个题目的解释,可以看看我的另一篇文章,里面会有详细的解释和扩展 Node.js事件循环有没有把你搞懵逼掉😳? - 掘金 (juejin.cn)
总结
今天的知识可以串联哪些知识点呢?
- 箭头函数的理解
- this指向的理解
- const和let区别
- 作用域的理解
- node事件循环的理解
- setTimeout和setImmediate的区别