一道简单的面试题引发的思考

版权声明:此文首发于本人简书账号-人生还有多少个二十年,转载请注明出处

此处有几百字唠叨:
  当天,我早早起床,跨越上百公里,高德导航,路人指点,跌跌撞撞到达招聘会现场,当时已是中午十二点半,吃了午餐(半瓶白开水),开始准备投递简历。绕场2周,发现能提供我想要的岗位(前端开发)的公司有十家左右。我总共带了5份简历,投递了4家中意的公司,其中2家直接现场面试。
  先说说最糟糕的那场面试: “我是来应聘Web开端的” *** (然后面试官纠正了一下,“Web前端”,尴尬了)。面试官接着就我的简历提了若干问题,基本上对简历的提问,未涉及技术细节,其中有“你github上的代码有人看吗?”(我又尴尬了,github上传的只是我自己做过的一些作品,上传的目的只是为了让HR能够看到我写的代码,从未在其它地方提及我有github账号,自然是没人访问了)。当时因为紧张,还有近期睡眠不足,头脑很迟钝,问题大多回答得一塌糊涂。
  另一场面试,面试官应该就是该公司的技术人员,提问的都是技术问题,问题不难,我基本上都会,因为自己平时也认真总结过一些,所以大多数回答地还算流畅。其中有两个问题把我的脸都丢光了。一个是,
“处理过浏览器的哪些兼容性问题”,我想了一两分钟居然还是想不出(脑子短路了)。学了一年多前端的我真没接触过兼容性问题吗?其实,我接触过的有不少,听说过的也有不少,例子那么多,可是当时居然想不出一个例子来(脑子短路了)。另一个问题,就是我下面要提及的作用域问题***,我当时思考的时间太久了...

这是回忆中的面试题

(实际略有差异,不纠结了):

function foo(){
    var a = b = 2;
}
foo();
alert(a);
alert(b);

question:说一下脚本的运行结果?
answer: 引用错误(FF中给出的错误提示:ReferenceError: a is not defined)。
reason:函数内声明的变量的作用域为函数作用域,在全局作用域中不能直接访问到函数内变量的值;而在函数中未声明就赋值的变量,在非严格模式下变成全局变量,成为window对象的一个属性,在严格模式下则会报错。此题的代码相当于以下代码:

var b = 2;
function foo(){
    var a =b;
}
foo();
alert(a);  
alert(b);

显然,全局作用域中是没有变量a的,所以alert(a)会导致错误,脚本无法继续执行。

简单的面试题已结束, 哈哈,现在让我当一回面试官吧?


改编题1

function foo(){
    var a = b = 2;
}
foo();
alert(b);
alert(a);

question: 说一下脚本运行的结果?
result:
alert(b); //2
alert(a); //ReferenceError: a is not defined
reason:原理同上


改编题2

function foo(){
    var a = b = 2;
}
foo();
alert(typeof a);
alert(typeof b);

question: 说一下脚本运行的结果?
result:
alert(typeof a); //undefined
alert(typeof b); //number
attention: 未定义的变量的数据类型为undefined,并不会报错。


改编题3

var a = 1;
var b = 1;
function foo(b){
    var a = b = 2;
}
foo(b);
alert(a);
alert(b);

question: 说一下脚本运行的结果?
result:
alert(a); //1
alert(b); //1
reason:这里我主要说一下b的结果,函数中参数中有变量b,相当于在函数中声明了变量b,调用函数的时候,由于基本类型的变量值是按值传递的,所以,函数的局部变量b被赋值为1,接着,又对局部变量b的值进行了更新,但这并不会影响全局变量b的值,故全局变量b的值仍然为1


改编题4

var a = 1;
var b = 1;
function foo(a,b){
       arguments[0]=2;
       arguments[1]=2;
       b = 3;
       console.log(a);
       console.log(b);
}
foo(a,b);
alert(a);
alert(b);

question: 说一下脚本运行的结果?
result:
console.log(a); //2
console.log(b); //3
alert(a); //1
alert(b); //1
reason: 此处我主要说一下arguments对象,它是函数的一个实参对象,是一个类数组,有length属性,并且也可以通过数组表示法获取指定索引值的元素,甚至可以被修改(简言之,arguments对象的值可读、可写),对arguments对象的修改直接同步到存放实参的各个变量。


改编题5

foo();
alert(a);
alert(b);
function foo(){
    a = b = 2;
}

question: 说一下脚本运行的结果?
result:
alert(a); //2
alert(b); //2
question:函数未声明,就调用,怎么不会报错?
reason:这是因为声明被提前了(hoisting
),声明被提升到作用域的顶部,此处,即全局作用域的顶部,在foo()之前。代码相当于:

function foo(){
    a = b = 2;
}
foo();
alert(a);
alert(b);

改编题6

var a = 1;
var b = 1;
foo();
alert(a);
alert(b);
var foo = function(){
    var a = b = 2;
}

question: 说一下脚本运行的结果?
result:
TypeError: foo is not a function
reason: 这里使用函数定义表达式,要清楚的是,声明是会提前的,但赋值却不会。换句话说,函数调用的时候,foo已经存在了(不信,你可以试试alert(foo);),但是,它的值是undefined。所以,这里就出现了类型错误。顺便提一下,undefined和null没有任何的属性和方法。

END
这是我的github网址,初学者可以看一下,应该会有所帮助。也欢迎大牛们莅临指导。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容