一惠桃、前言
不知道上一篇的幾個(gè)面試題大家做的怎么樣了~
感覺如何?是不是很坑。
但是其實(shí)這些奇葩的面試題往往考的都是你的基礎(chǔ)知識(shí)掌握的如何~
一旦基礎(chǔ)知識(shí)掌握的很好,那么這些面試題都是小case了啊!OО痢!
小case滴啦~
二贝攒、關(guān)于 for 循環(huán)的面試題
你認(rèn)為這個(gè)應(yīng)該打印出來什么結(jié)果呢盗誊?why?
for (var i = 0,j = 0; i < 4,j < 7; i++,j++) {
console.log(i);
}
三隘弊、關(guān)于this的面試題
function fn1() {
console.log(this);
}
var arr=['a','b'];
arr.a=fn1;
arr.a();
setTimeout(arr.a,1000);
四哈踱、關(guān)于this的面試題
var myObject={
foo:"abc",
fun:function (){
var self=this;
alert(this.foo);
alert(self.foo);
(function (){
alert(this.foo);
alert(self.foo);
}());
}
}
myObject.fun();
老規(guī)矩: 停-------再翻就看到答案了,先做出答案再看解析
我不看我不看
五梨熙、答案解析
1) 第一題
答案:打印0,1,2,3,4,5,6
這個(gè)題關(guān)鍵點(diǎn)开镣,就在for循環(huán)中定義了兩個(gè)變量,還有兩個(gè)判斷咽扇。
那到底那一次的判斷才算數(shù)呀邪财?
其實(shí)這個(gè)題考的不是 for循環(huán)
,而是考 逗號(hào)操作符
质欲。
- 逗號(hào)表達(dá)式的一般形式是:表達(dá)式1树埠,表達(dá)式2,表達(dá)式3……表達(dá)式n
- 小案例:
var a=(1,2,3);
這個(gè)代碼執(zhí)行后a=?
嘶伟。答案是 a=3怎憋。
逗號(hào)操作符的優(yōu)先級(jí)別在所有運(yùn)算符中是最低的,結(jié)合方向是"自左至右"的。
如果遇到逗號(hào)操作符绊袋,說明當(dāng)前的語句并沒有執(zhí)行結(jié)束毕匀。
- 所以在這道面試題中,
i<4,j<7
癌别,這句話會(huì)執(zhí)行到j<7
結(jié)束皂岔。- 接下來你可互換一下
i<4,j<7
,變成j<7,i<4
嘗試一下結(jié)果驗(yàn)證一下规个。
2)第二題
答案:第一句彈出 數(shù)組arr凤薛,第二句彈出 window對(duì)象
- 函數(shù) fn1 被復(fù)制給arr的屬性a上姓建,函數(shù)變成了arr的a方法诞仓。
- 后邊arr調(diào)用了自己的方法a,所以a方法的this指向arr
- 計(jì)時(shí)器中速兔,是借用了arr的a方法墅拭,并不是arr調(diào)用的。而是延遲1s后直接調(diào)用的涣狗,那是誰呢谍婉?window 啊。
3)第三題
答案:“abc”,“abc”,undefined,“abc”
- 這道題考的還是關(guān)于this的執(zhí)行镀钓。
- 因?yàn)閠his在不用的環(huán)境下是會(huì)改變指向的穗熬。
變量self
保存的當(dāng)前的this,所有在能調(diào)用self的地方丁溅。使用的都是self當(dāng)時(shí)保存的this唤蔗。
- 前兩個(gè)self和this相等,所以都打印"abc"
- 而在fun函數(shù)中的
匿名函數(shù)自調(diào)用
的函數(shù)中 this指向的是window窟赏。而
self還是之前保存的this妓柜。所以一個(gè)打印"abc",一個(gè)打印window對(duì)象
拜拜~