ProJavaScript 程序员面试问题(附答案)

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

这些问题可以区分某人是否是一个特别的 JavaScript 程序员,而是真正从事专业的 JavaScript 开发、面向对象、可重用和可维护。

请提供 的答案,这样一个中级的和特别的 JavaScript 程序员就可以面试更有经验的人了,我很难回答这些高级问题中的很少一部分。请避免公开提问.

为了更好的阅读体验和更容易的面试准备,请保留 采访问题/回答

157104 次浏览

询问 意外关闭如何在 IE 中导致内存泄漏。

问“你使用什么样的单元测试框架? 为什么?”

您可以决定是否真的有必要使用测试框架,但是对话可能会告诉您这个人是多么的专业。

关于“ This”,这是一个很好的问题,可以作为 JavaScript 开发人员的真正测试。

(我猜你指的是浏览器端的 JavaScript)

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

回答: 好的代码,伟大的代码重用。为了从特定于浏览器的实现中抽象出 DOM 功能,这些库已经投入了数千个工时。没有理由仅仅为了重新发明修复程序而自己经历所有不同浏览器 DOM 的头疼问题。

询问他们如何确保当用户关闭 JavaScript 或 JavaScript 不可用时,他们的页面仍然可用。

没有唯一的正确答案,但是您正在试图找到关于 渐进增强的一些策略的答案。

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

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

因为 JavaScript 是一种非常小的语言,但是具有令人难以置信的复杂性,所以您应该能够提出相对基本的问题,并根据这些问题的答案判断它们是否真的有那么好。例如,我衡量面试剩余部分的标准第一个问题是:

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

初学 JS 的程序员 也许吧有一个关于局部变量和全局变量的基本答案。中级的 JS 人员肯定应该有这个答案,并且应该提到函数级的范围。任何自称为“高级”JS 程序员的人都应该准备好谈论局部变量、隐含的全局变量、 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 特定的东西,如测试、工作流、版本控制等,以了解他们是否是一个好的 程序员

基本的 JS 编程

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

哎呦喂

  • Difference between Classic Inheritance and Prototypical Inheritance
  • 什么是 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

Misc

  • Graceful Degradation V/s Progressive Enhancement

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

如果他通过了上述类似手机屏幕的技术问题,让他当场画出一些愚蠢的东西,比如 Ajax 网址缩写器。然后拷问他的作品集。在这个领域没有令人惊讶的投资组合 = 中级开发人员,也不是你想要负责你闪亮的新项目的家伙。