前端經典面試題總結

接着我以前寫的一篇有關前端面試題的總結,分享幾道比較經典的題目:

第一題:

圖片描述

考點:做用域,運算符前端

1.console.log((inner.func,inner.func)())面試

栗子:算法

var i=1,k=1;
    console.log((i++,k++)) //i,k都會進行運算,可是最後以後輸出最後一個也就是k.

*那麼(inner.fun,inner.func)其實就是inner.func,並且是個匿名函數,也就是屬於window,就輸出25

第二和第三個都是相似的,並且做用域是inner,都是輸出20
最後一個:(inner.fun=inner.func)其實就是inner.func,並且是個匿名函數,也就是屬於window,就輸出25閉包

第二題

圖片描述

首先"a" in window 是返回true,由於"a"是始終存在window的,在外面加個!判斷是否存在,很明顯a永遠在window裏存在,全部輸出undefinedapp

第三題

圖片描述

你們忘記的能夠去普及一下,call,apply方法的用法以及適用場景,兩個方法都是爲了改變this指向,若是第一個參數傳入的對象調用者是null
或者undefined的話,call方法將把全局對象(也就是window)做爲this的值。因此,無論你何時傳入null,其this都是全局對象window.
則返回[object window]函數

第四題

圖片描述

這裏實際執行的是a[b.toString()] = 123,當你在同一個key賦值,那麼後者會覆蓋前者,因此輸出456this

第五題

圖片描述

doFun1(obj.logName),obj.logName做爲參數傳入,最後執行(obj.logName)(),匿名函數,this指向window,因此輸出"HanMeiMei",
doFun2(obj),obj做爲參數傳入,最後執行obj.logName(),做用是obj,則輸出LiLeispa

第六題

圖片描述

這裏可能不少人一看就以爲是輸出1,2,3,4,錯誤×,
這裏其實for循環被放入主線程會先被執行,最後纔會去走定時器裏面的方法,當輸出的時候i就已是5了,並且是1s輸出一次,因此是5,5,5,5。線程

若是要輸出1,2,3,4,只需把var 改爲let,let 是ES6的語法,是在括號的才能使用,別處不行code

第七題 :什麼是閉包,有什麼優缺點(重點)

第八題:什麼是原型鏈(重點)

第九題

有一對兔子,從出生後第三個月起每月都生一對兔子 ,小兔子長到第三個月後每月又生一對兔子,假如兔子都不死 ,問每月的兔子總數爲多少?

考點:遞歸
算法題目其實挺有意思,最主要是咱們先要找規律

月 1 2 3 4 5

每個月對應數量 1 1 1+1 1+1+1 1+1+1+1+1 前兩個數加起來就是後一個
規律找到了,因此這麼寫就對了

function fib(n) {
if (n == 1 || n == 2) {
return 1;
} else {
return fib(n - 1) + fib(n - 2);
}
}
fib(100)//隨你本身賦值了

總結:就寫到這吧,打的手疼。有什麼不懂得,你們能夠一塊兒在評論下討論,我知無不言。(* ̄︶ ̄)

相關文章
相關標籤/搜索