一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)分__第1頁
一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)分__第2頁
一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)分__第3頁
一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)分__第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)分_ 在js中,常常會(huì)遇到在函數(shù)里調(diào)用其它函數(shù)的狀況,這時(shí)候會(huì)有 fn() 這種調(diào)用方式,還有一種是 return fn() 這種調(diào)用方式,一些初學(xué)者常常會(huì)被這兩種方式給繞暈了。這里用一個(gè)優(yōu)雅的面試題來分析一下兩種方式的不同之處。 var i = 0; function fn() i+; if(i 10) fn(); else return i; var result = fn(); console.log(result); 這是一道隱蔽了坑的面試題,看似很簡潔,大部分人可能想都不想就答出了10。而事實(shí)上運(yùn)行可知打印出來的是 unde

2、fined。這道陷阱題很直觀的體現(xiàn)出了前面所說的問題,當(dāng)我們將執(zhí)行fn的那一行修改為: var i = 0; function fn() i+; if(i 10) return fn(); else return i; var result = fn(); console.log(result); 這時(shí),會(huì)發(fā)覺打印出來的結(jié)果最終不負(fù)眾望的是 10 了。 為什么這里加不加return區(qū)分會(huì)這么大? 這里的主要緣由很簡潔,JavaScript的函數(shù)都是有默認(rèn)返回值的,假如函數(shù)結(jié)尾不寫return,會(huì)默認(rèn)返回undefined,這就是為什么在chrome的console掌握臺里,寫代碼常常下面會(huì)消失

3、一行undefined的緣由。 再認(rèn)真看看這個(gè)例子,當(dāng)i自增到9的時(shí)候,也就是倒數(shù)其次次遞歸調(diào)用fn的那一次,假如沒有return,這一次執(zhí)行完fn,會(huì)默認(rèn)return undefined,而不會(huì)連續(xù)下一次遞歸了。當(dāng)加上了 return,在這里則會(huì)連續(xù)最終一次遞歸,即i=10的時(shí)候,跳入else里面返回得到正確的10。 說到這里,可以引申出一個(gè)更為經(jīng)典的例子,有名的二分查找法: var mid = Math.floor(arr.length - 1) / 2); function search(n, mid) if (n arrmid) mid = Math.floor(mid + arr.length) / 2); return search(n, mid); else if (n arrmid) mid = Math.floor(mid - 1) / 2); return search(n, mid); else return mid; var index = search(n, mid); console.log(index); 二分查找法也是需要多次遞歸調(diào)用,許多新手在第一次實(shí)現(xiàn)這個(gè)算法的時(shí)候常常會(huì)犯的一個(gè)錯(cuò)誤就是遺忘在遞歸的函數(shù)前加上return,最終導(dǎo)致返回結(jié)果是undefined,這里的道理也和前面是類似的,不加retur

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論