上周,我发布了《C#程序员的7个面试问题》。这次我要说的是如何淘汰那些只会伪装成数字的JavaScript程序员。您会惊讶于有多少人参加面试,他们的简历看起来都很棒。但是如果你问他们有关它的问题,你会发现他们对此一无所知。我不知道他们的简历是真实的还是噱头。所以和其他面试官一样,我也有自己的一套方法,首先确保面试官值得我面试——半小时之内,我可以在电话里搞定。所以,如果有一些你认为应该有但没有在我的7个问题中的问题,可能是因为我放在后面的面试中。另外,我想对那些可能认为技术面试并不能真正判断程序员是否真的优秀的人说……你是对的。当我还是一个年轻的程序员时,如果面试技术问题,我也有同样的感觉。但是现在当了面试官,我觉得这样至少可以证明技术面试通过的人比失败的人更有可能成为优秀的程序员。***,我想说的是,我没有通过候选人,因为他们回答错了三两个问题或者没有按照我的预期回答。但是,如果对方不能回答大部分问题,那我就在心里给他亮红灯!这是面试前应该问的7个JavaScript面试问题。否则,您很可能会浪费时间。1、创建JavaScript对象的两种方式是什么?如果您使用过JavaScript,这是一个非常简单的问题。你必须至少知道一种方法。但是,尽管如此,根据我的经验,有很多自称为JavaScript的程序员说他们不知道如何回答这个问题。使用“new”关键字调用函数。打开/关闭括号。var={};你也可以继续问,“使用new关键字,在什么情况下创建对象?”但是,由于我只是想淘汰一些人,所以我会等到真正的面试时再问这些问题。2.如何创建数组?这是与“如何创建对象”相同级别的问题。但是,也有一些人可以回答第一个问题,却不能回答这个问题。使用下面的代码,您可以轻松地创建一个数组:varmyArray=newArray();创建数组是一个非常复杂的过程。但我希望听到候选人使用方括号的回答。varmyArray=[];当然,我们还可以继续问其他的问题,比如如何高效的去除JavaScript数组中的重复元素等等,但是由于我们只需要知道候选人是否值得进一步观察,关于数组的问题我就来了这就是结局。3.什么是变量提升?这个问题有点难,不要求对方回答。然而,这个问题可以快速确定候选人的技能水平:他们真的像他们声称的那样理解编程语言吗?变量提升意味着在作用域内无论何处声明变量,JavaScript引擎都会将声明移动到作用域的顶部。如果你在函数中间声明了一个变量,比如在某行给一个变量赋值:functionfoo(){//这里省略了一些代码vara="abc";}实际上会运行这样的代码:functionfoo(){变量一个;//这里省略了一些代码a="abc";}4.全局变量有什么风险,如何保护代码不受干扰?全局变量的危险在于其他人可以创建一个具有相同名称的变量,然后覆盖您正在使用的变量。这在任何语言中都是令人头疼的。有很多方法可以防止它。其中最常见的是创建一个包含所有其他变量的全局变量:varapplicationName={};然后,每当您需要创建全局变量时,只需将其附加到对象即可。applicationName.myVariable="abc";另一种方法是将所有代码封装到一个自动执行的函数中,使所有声明的变量都声明在该函数的范围内。(函数(){vara="abc";})();实际上,您可以同时使用这两种方法。5.如何遍历JavaScript对象中的成员变量?for(varpropinobj){//hasOwnProperty的加分if(obj.hasOwnProperty(prop)){//在这里做点什么}}6.什么是闭包(Closure)?闭包允许在另一个外部函数的范围内定义的函数仍然可以访问该外部函数内的变量,即使范围内的其他所有内容都消失了。如果候选人能够解释在for/next循环中使用闭包的一些风险,而无需声明变量来保存迭代变量的当前值,则应该给予加分。7.请描述你经历过的JavaScript单元测试。关于这个问题,我们真的只是想看看候选人是否真的做过JavaScript单元测试。这是一个开放式的问题,没有具体的正确答案,但对方至少要能说出一些过程。欢迎大家补充。
