4道js面试题

Posted by c4pr1c3 on December 4, 2010

设计了4到js面试题,最近在面试Web前端开发人员时随机组合用了几次,没有一个来面试的能全答对,看来这个题有点分享的价值,贴出来看看:

var a = 10;
sayHi();
function sayHi() {
var a = 20;
alert(a);
}
alert(a);

20 10

var a = 10;
sayHi();
function sayHi() {
a = 20;
alert(a);
}
alert(a);

20 20

var a = 10;
sayHi();
function sayHi()
{
a = a + 10;
alert(a);
return a;
}
alert(a);
alert(sayHi()+10);

20 20 30 40

var a = 10;
sayHi();
function sayHi()
{
var a = a + 10;
alert(a);
return a;
}
alert(a);
alert(sayHi()+10);

NaN 10 NaN NaN

心算的客官可以CTRL-A对照本页面上的答案

这几道面试题的设计的灵感是来源于以前做的一个hack game,考察的是Javascript的全局变量和局部变量定义区别。大家可能用习惯了var关键字来定义变量,但可能很少有人想过var的用处是什么。实际上在Javascript中,不用var也是可以定义变量的,而且这种方式定义的变量是全局变量。全局Javascript变量是危险的,不仅会造成名字污染,也可能会被js hook(其实本质也是名字污染)。除此之外,后两道题还考察了变量的初始化值问题和弱类型语言的基本运算特例