专业JavaScript程序员面试问题(附答案)

什么是好的问题来确定申请人是否真的是一个专业的JavaScript(浏览器端)开发人员?

问题,可以区分如果某人不是一个专门的JavaScript程序员,但真正做专业的JavaScript开发,面向对象,可重用和可维护。

请提供答案 ,所以一个中级和临时的JavaScript程序员可以采访更有经验的人,提出答案,相当less的这些高级问题将不能回避。 请避开未解决的问题

请保持一个面试问题/回答每个SO回答更好的阅读体验和更容易的面试准备。

因为JavaScript是如此小的一种语言,但是具有令人难以置信的复杂性,您应该能够提出相对基本的问题,并根据他们的答案找出它们是否真的很好。 例如,我的标准第一个问题来衡量剩下的面试是:

在JavaScript中, var x = 1x = 1什么区别? 尽可能多或尽可能less的细节,你觉得舒服。

新手JS程序员可能会有一个关于本地人与全局的基本答案。 中级JS的人应该肯定有这个答案,并应该提到function级范围。 任何自称为“高级”JS程序员的人都应该准备好谈论当地人,隐含的全局variables, window对象,函数范围,声明提升和范围链。 此外,我很想听听[[DontDelete]] ,提升优先级(参数vs var vs function )和undefined

另一个好的问题是要求他们写一个sum()函数来接受任意数量的参数,并返回它们的总和。 然后,要求他们使用该函数(不进行修改)将数组中的所有值相加。 他们应该写一个如下所示的函数:

 function sum() { var i, l, result = 0; for (i = 0, l = arguments.length; i < l; i++) { result += arguments[i]; } return result; } sum(1,2,3); // 6 

他们应该像这样在你的数组上调用它( apply上下文可以是任何,我通常在这种情况下使用null ):

 var data = [1,2,3]; sum.apply(null, data); // 6 

如果他们有这些答案,他们可能知道他们的JavaScript。 然后,你应该继续问他们关于非JS特定的东西,如testing,工作stream程,版本控制等等,以查明他们是否是一个好的程序员

基本的JS编程

  • Scope of variable
  • 什么是Associative Array ? 我们如何使用它?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • difference between private variable, public variable and static variable什么difference between private variable, public variable and static variable ? 我们如何在JS中实现这一点?
  • 如何在运行时add/remove properties to object
  • 如何实现inheritance
  • 如何extend built-in objects
  • 为什么extending array is bad idea

DOM和JS

  • Difference between browser detection and feature detection
  • DOM Event Propagation
  • Event Delegation
  • Event bubbling V/s Event Capturing

杂项

  • Graceful Degradation V/s Progressive Enhancement

询问“这个”。 这是一个很好的问题,可以作为JavaScript开发人员的真正考验。

(我假设你的意思是浏览器端的JavaScript)

问他为什么,尽pipe他对JavaScript有无穷的理解,但使用jQuery,Mootools,Prototype等现有的框架仍然是一个好主意。

答:好的编码器代码,伟大的编码器重用。 成千上万的工时已经被注入到这些库中,以便从浏览器特定的实现中抽象DOMfunction。 没有理由为了重新修复这些问题而自己去浏览所有的浏览器DOM头痛。

询问他们如何确保他们的页面在用户closuresJavaScript或JavaScript不可用时继续可用。

没有一个真正的答案,但你正在寻找答案,谈论一些渐进增强的策略。

渐进增强包含以下核心原则:

  • 所有浏览器都应该可以访问基本内容
  • 所有浏览器都应该可以访问基本function
  • 稀疏,语义标记包含所有内容
  • 增强的布局由外部链接的CSS提供
  • 增强的行为由[[Unobtrusive JavaScript | unobtrusive]]提供,外部链接的JavaScript
  • 最终用户浏览器首选项受到尊重

询问意外closures可能会导致IE中的内存泄漏。

问“你使用什么unit testing框架?为什么?”

你可以决定实际使用一个testing框架是否真的有必要,但是这个对话可能会告诉你这个人是多么的专业。

中级程序员应该掌握他们的工具技术。

如果他通过了上面的技术手机屏幕式的问题,让他在现场画出一些愚蠢的东西,比如ajaxurl缩写。 然后烧他的投资组合。 没有令人惊叹的投资组合=在这个领域的中间开发人员,而不是你想要负责你的shiny的新项目的人。