一道前端JS面試題,求解?

網上看到的一道前端JS面試題,有點兒不太理解,幫忙解釋一下?

var i,j,k;

for(i=0,j=0;i&<10,j&<6;i++,j++) {

k = i+j;

}

document.write(k); //10


首先i == j,其次當j==5為最後一輪循環,此時,k = i+j == 10,注意是k=* 不是k+=*。

純C語言解釋。。不知道對不對。。。


為了方便你理解,把題目改成,你在瀏覽器中運行一遍

var i,j,k;
for(i=0,j=0;i&<10,j&<6;i++,j++) { k = i+j; console.log(i,j) } console.log(k);


主要弄清楚逗號的作用,這題就不難解~


沒有任何的trick,正常理解就可以了。


js的逗號表達式和c的是一樣的

重點就在這句了

i&<10,j&<6

這句總是返回j&<6的值,所以結束循環時j是=6的,所以i的值也是6,他們是同步的。然後最後一次運行循環體的時候i和j都是5,所以k為10,自然輸出10


只有一層循環,5+5 = 10嘛……

天氣太冷了,喝碗薑湯吧……


這個主要是逗號語句,當有多個條件,之間用逗號隔開的時候,會返回最右側的條件

可以試驗:

第一個:

var i,j,k;
for(i=0,j=0;i&<10,j&<6;i++,j++) { k = i+j; } console.log(k); 第二個: var i,j,k; for(i=0,j=0;j&<6,i&<10;i++,j++) { k = i+j; } console.log(k);

兩個的k值,就可以得出這個結論了……


for (表達式1; 表達式2; 表達式3)

相當於

表達式1;

for(; ;)

{

if(!表達式2) break;

XXXXX

XXXXX

XXXXX

表達式3;

}

這裡主要是考逗號表達式的吧。

表達式1, 表達式2, 表達式3,表達式4.....

一個逗號表達式, 取決於最後一個表達式的值

所以, 那個i&<10, j&<6就是相當於 j&<6

所以5+5==10 顯而易見了


逗號是表達式並列運算符,會依次計算各表達式的值並最終返回的值是最後一個表達式的運算值,如:表達式a,表達式b,...表達式n。程序會依次計算表達式1到n的值並將表達式n的值作為返回值。


等價於:

var i,j,k;

for(i=0,j=0;j&<6;i++) {

k = i+j;

j++;

}

document.write(k);

題目是不是教育部出的,跟大學計算機二級一樣變態


因為 j 每次循環都在累加

但是條件又是 j &<6

那麼也就是j最大得5

循環5次

j==i==5


現實誰這麼寫,估計都會被罵的狗血淋頭。也就是只用在面試


i=6時,不滿足for循環條件,那麼i++,j++之前i和j的值都是5,i+j --&> 5+5


var i,j,k; for(i=0,j=0;i&<10,j&<6;i++,j++) { k = i+j; console.log(i,j) } console.log(k); VM168:2 0 0 VM168:2 1 1 VM168:2 2 2 VM168:2 3 3 VM168:2 4 4 VM168:2 5 5 VM168:2 10 undefined var i,j,k; for(i=0,j=0;j&<6,i&<10;i++,j++) { k = i+j; console.log(i,j) } console.log(k); VM169:2 0 0 VM169:2 1 1 VM169:2 2 2 VM169:2 3 3 VM169:2 4 4 VM169:2 5 5 VM169:2 6 6 VM169:2 7 7 VM169:2 8 8 VM169:2 9 9 VM169:2 18


相當於

for(i = 0,j=0;i&<10j&<6;i++,j++) {

k = i+j;

}

document.write(k);

顯然當i==j==5的時候跳出循環,故k==10


弄懂js作用域 這個問題就不難理解了。


推薦閱讀:

教師公招如何準備結構化面試?
三方協議真正意義上保護的是誰?
為什麼會有公司要求候選人提供其它公司offer,以提供更高的薪資?offer說好的保密就是說說的嗎?
銷售人員和技術人員的不可替代性和專業度分別怎樣體現?
怎樣勸退自己親自面試招進來的人?或怎樣避免這樣的情況發生?

TAG:前端開發 | 面試 | JavaScript | 招聘 | 面試問題 |