版权声明:此文首发于我的简书账号人生另有多少个二十年,转载请说明出处。
此处有几百字絮聒:
当天,我早早起床,逾越上百千米,高德导航,路人指导,跌跌撞撞抵达招聘会现场,当时已是正午十二点半,吃了午饭(半瓶白开水),最先预备投递简历。绕场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网址,初学者能够看一下,应当会有所协助。也迎接大牛们莅临指导。