ch1oechao / code

Code notes, update posts in issues
https://github.com/zchen9/code/issues
42 stars 6 forks source link

What Do I Need to Know to Ace a JavaScript Interview? #3

Open ch1oechao opened 8 years ago

ch1oechao commented 8 years ago

JavaScript 面试中可能被问到的一些知识点收集:

如果你不能简单说清楚,就是你没完全明白。 If you can't explain it simply, you don't understand it well enough.

-- 爱因斯坦

我一直把这句话奉为真正掌握知识的标杆,那么在面试中简明扼要地回答问题是检验是否真的明白某项技术的标准。

所以 js-interview-review 是一篇非常好的文章,列出几项精简概念来检测开发者是否真的了解 JavaScript,并提供相关学习资料。

内容比较多,所以会慢慢看,然后做一些笔记 🎐

函数式编程

Functional programming in JavaScript 简单明了地介绍函数式编程

笔记:

简单来说,JavaScript的函数其实可以转化为变量使用,即:

    function hello(){ ... }
    // =>
    var hello = function() { ... }

那么函数式编程的意义在于把逻辑抽丝剥茧后转化为一个个小函数,用变量的形式存储和调用。 这样的话每个小逻辑可以更好的复用,而描述整个大逻辑的时候,只需要把小逻辑进行组装。 这样,整个函数结构清晰明了,而且利于 debug。

什么是事件循环以及 JavaScript 的异步机制

笔记:

事件处理机制

浏览器中会提供一个专门的 JavaScript 处理引擎,比如 Chrome 的 V8 处理引擎。

然而 JavaScript 引擎并不是所有代码都处理,比如 setTimeout / addEventListener 等 Web API 其实是由浏览器专门处理而不是 V8。

V8 的处理机制为单线程,所以一次只处理一件事情,事件以栈的形式执行,那么首先入栈的为 main 函数,接着依次按照函数执行顺序将事件入栈,然后从栈顶开始一项一项事件执行完后出栈,直到最后的 main 函数出栈,整个函数执行完毕。

碰到使用 Web API 的函数时,栈接收后发现自身处理不了,便会将这些函数依次传给浏览器进行特别“照顾”。

浏览器处理完这些“特殊”函数后,依次传入一个任务队列里。

如果此时的 V8 处理栈空闲,那么任务队列里的函数依次进入栈内执行。

这就是为什么 setTimeout 函数总是最后才执行...

Example:


console.log(1);

setTimeout(function() {
    console.log(3);
}, 0);

function two() {
    console.log(2);
}

two();

打印结果依次为 1,2,3

JavaScript 的核心概念:作用域链,原型链,作用域,闭包,构造器以及 this

ws93 commented 4 years ago

不错啊总结的