每个 JavaScript 工程师都应当知道的 10 个面试题
1. 能说出来两种对于 JavaScript 工程师很重要的编程范式么?
JavaScript 是一门多范式(multi-paradigm)的编程语言,它既支持命令式(imperative)/面向过程(procedural)编程,也支持面向对象编程(OOP,Object-Oriented Programming),还支持函数式编程(functional programming)。JavaScript 所支持的面向对象编程包括原型继承(prototypal inheritance)。
面试加分项
原型继承(即:原型,OLOO——链接到其它对象的对象);
函数式编程(即:闭包(closure),一类函数(first class functions),lambda 函数:箭头函数)。
面试减分项
连范式都不知道,更别提什么原型 OO(prototypal oo)或者函数式编程了。
深入了解
The Two Pillars of JavaScript Part 1:JS 两大支柱之一:原型 OO
The Two Pillars of JavaScript Part 2:JS 两大支柱之二:函数式编程
2. 什么是函数式编程?
函数式编程,是将数学函数组合起来,并且避免了状态共享(shared state)及可变数据(mutable data),由此而产生的编程语言。发明于 1958 年的 Lisp 就是首批支持函数式编程的语言之一,而 λ 演算(lambda calculus)则可以说是孕育了这门语言。即使在今天,Lisp 这个家族的编程语言应用范围依然很广。
函数式编程可是 JavaScript 语言中非常重要的一个概念(它可是 JavaScript 的两大支柱之一)。ES5 规范中就增加了很多常用的函数式工具。
面试加分项
纯函数(pure functions)/函数的纯粹性(function purity)
知道如何避免副作用(side-effects)
简单函数的组合
函数式编程语言:Lisp,ML,Haskell,Erlang,Clojure,Elm,F#,OCaml,等等
提到了 JavaScript 语言中支持函数式编程(FP)的特性:一类函数,高阶函数(higher order functions),作为参数(arguments)/值(values)的函数
面试减分项
没有提到纯函数,以及如何避免副作用
没有提供函数式编程语言的例子
没有说是 JavaScript 中的哪些特性使得函数式编程得以实现
深入了解
The Two Pillars of JavaScript Part 2:JS 两大支柱之二:函数式编程
The Dao of Immutability
Composing Software
The Haskell School of Music
3. 类继承和原型继承有什么区别?
类继承(Class Inheritance):实例(instances)由类继承而来(类和实例的关系,可以类比为建筑图纸和实际建筑