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

Jan*_*zny 129 javascript

确定申请人是否真的是专业JavaScript(浏览器方面)开发人员有哪些好问题?

可以区分某人是否是特定的JavaScript程序员,但实际上是在进行专业的JavaScript开发,面向对象,可重用和可维护的问题.

请提供答案,以便中级和临时JavaScript程序员可以采访更有经验的人,并提出很少有这些高级问题的答案.请避免公开提问.

根据SO答案保留一个面试问题/答案,获得更好的阅读体验和更轻松的面试准备.

bch*_*rry 118

因为JavaScript是一种如此小的语言,但具有令人难以置信的复杂性,你应该能够提出相对基本的问题,并根据他们的答案找出它们是否真的那么好.例如,我衡量其余采访的标准第一个问题是:

在JavaScript中,var x = 1和之间有什么区别x = 1?在您感到舒适的同时,尽可能多地回答细节.

新手JS程序员可能有一个关于locals与globals的基本答案.中级JS家伙肯定应该有这个答案,并且应该提到功能级范围.任何自称为"高级"JS程序员的人都应该准备好谈论本地人,隐含的全局,window对象,函数范围,声明提升和范围链.此外,我很乐意听到[[DontDelete]],提升优先级(参数与varvs 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
Run Code Online (Sandbox Code Playgroud)

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

var data = [1,2,3];
sum.apply(null, data); // 6
Run Code Online (Sandbox Code Playgroud)

如果他们得到了这些答案,他们可能知道他们的JavaScript.然后,您应该继续向他们询问非JS特定的内容,例如测试,工作流程,版本控制等,以确定他们是否是一名优秀的程序员.

  • sum函数应该对非数字类型具有弹性,而不会抛出错误.此外,它应该能够将数字作为字符串处理以获得额外的信用. (5认同)
  • 好问题.小挑剔:我相信你的意思是"返回结果"而不是"返回我".专业提示:设置一个不错的小测试环境来测试代码,然后发布;-) (4认同)
  • 哇,这是一个愚蠢的错误.我在发布之前在jsFiddle上测试了大部分代码,但没有对此进行测试.谢谢 :) (4认同)
  • 这一行:for(i = 0,l = arguments.length; i <l; i ++)不好,因为每次迭代都会计算arguments.length.如果在for循环之前分配l = arguments.length则更好.对? (3认同)
  • 关于发现他们是否是一名优秀的程序员,要提及+1. (2认同)
  • @thomallen你的想法是在正确的地方,但在这种情况下,`arguments.length`只会被评估一次.请注意,OP在第一个分号之前的`for`循环的第一个语句中将其分配给`l`.这些表达式只评估一次.在每次迭代时评估第二个表达式,它只检查`i <l` (2认同)

pra*_*c84 93

基本的JS程序设计

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

OOPS JS

  • 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

杂项

  • Graceful Degradation V/s Progressive Enhancement

  • 为JS开发人员准备这样的事情:JavaScript没有关联数组.但是,JavaScript确实具有对象文字,可以像关联数组一样使用.此外,可以使用点表示法或方括号和字符串访问对象的属性. (22认同)
  • 这是为了招聘JS Gurus. (16认同)
  • 这些是自称为"JavaScript开发人员"的人的基线.我认为答案的深度是你如何衡量他们作为一个大师. (8认同)
  • 你的意思是"原型继承".常见的错误. (8认同)
  • @wizzard你的意思是"典型的错误":p (4认同)

Ani*_*mde 24

询问"这个".这是一个很好的问题,可以成为JavaScript开发人员的真正考验.

  • 这=== http://stackoverflow.com/questions/2492123/pro-javascript-programmer-interview-questions-with-answers(BADUM-TISH!) (15认同)
  • 我认为这个问题有助于http://stackoverflow.com/questions/2148451/help-this-is-confusing-me-in-javascript (2认同)

Mat*_*att 17

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

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

答:好的编码器代码,伟大的编码器重用.已经有数千个工时涌入这些库中,以便从浏览器特定的实现中抽象出DOM功能.没有理由自己完成所有不同的浏览器DOM头痛只是为了重新发明修复程序.

  • @Tim Down:当然,但是如果你找到了一个声誉良好的软件包,那么软件包的几乎所有部分都将由有能力的人进行审核.作为开源软件包的用户,您可以在发现错误时提交更正,同时添加您的专业知识. (5认同)

Jon*_*nan 11

询问他们当用户关闭JavaScript或JavaScript不可用时,他们如何确保页面继续可用.

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

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

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


Rob*_*sto 6

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


tva*_*son 6

问"你使用什么单元测试框架?为什么?"

您可以决定实际使用测试框架是否真的有必要,但是对话可能会告诉您很多关于此人的专业知识.