1.函數(shù)聲明和函數(shù)表達式有什么區(qū)別
函數(shù)聲明是使用function來進行聲明的氛赐,可以不用在意調(diào)用函數(shù)的前后位置漠吻,是因為函數(shù)聲明會前置擅耽。
而函數(shù)表達式是則是通過”=“(賦值)來聲明函數(shù)傻盟,函數(shù)表達式必須放在調(diào)用函數(shù)之前速蕊。因為函數(shù)表達式是將變量提升,而不是將函數(shù)前置娘赴,而此時的變量是undefined规哲。所以函數(shù)表達式必須在調(diào)用函數(shù)之前。
2.什么是變量的聲明前置诽表?什么是函數(shù)的聲明前置
聲明前置 會都會提升到當(dāng)前作用域的頂部
var 聲明的變量會前置唉锌,而function定義的函數(shù)隅肥,則會將函數(shù)的聲明前置。
例如
3.arguments 是什么
arguments shi類數(shù)組的對象袄简,用來顯示所有傳入函數(shù)的參數(shù)腥放。
4.函數(shù)的"重載"怎樣實現(xiàn)
在java或c等語言中,重載是函數(shù)名相同痘番,而參數(shù)類型不同捉片,從而滿足相同函數(shù)不同參數(shù)對不同功能的實現(xiàn)平痰。但是在js中汞舱,相同的函數(shù)會出現(xiàn)覆蓋的問題,要實現(xiàn)重載宗雇,只有在函數(shù)內(nèi)部實現(xiàn)對不同參數(shù)類型的區(qū)分昂芜,然后實現(xiàn)不同區(qū)分的實現(xiàn)秩贰。
5.立即執(zhí)行函數(shù)表達式是什么吆录?有什么作用
立即執(zhí)行函數(shù)也叫IIFE是能夠立刻執(zhí)行,避免了全局變量的污染愧口,也類似的模仿出了一個塊作用域舞虱,IIIFE之外的函數(shù)是無法訪問IIFE函數(shù)內(nèi)部的欢际。
6.求n!,用遞歸來實現(xiàn)
7.以下代碼輸出什么矾兜?
getInfo("饑人谷"损趋,2,"男");輸出的是
getInfo("小谷"椅寺,3)浑槽;輸出的是
getInfo('男')輸出的是:
8. 寫一個函數(shù),返回參數(shù)的平方和返帕?
9.如下代碼的輸出桐玻?為什么
結(jié)果為:
因為console.log(a)在 var a=1之前,變量a提升荆萤,此時的結(jié)果為undifined.
console.log(b)是因為b沒有聲明镊靴,所以出現(xiàn)了錯誤。
10. 如下代碼的輸出链韭?為什么
結(jié)果為:hello world
? ? ? ? ? ? ? ?undefined?
因為函數(shù)sayName是函數(shù)聲明偏竟,函數(shù)的聲明會前置。
而sayAge是函數(shù)表達式梧油,是將變量前置苫耸,變量前置的結(jié)果是undefined
11. 如下代碼輸出什么? 寫出作用域鏈查找過程偽代碼
結(jié)果是10
12. 如下代碼輸出什么? 寫出作用域鏈查找過程偽代碼
結(jié)果為:30
執(zhí)行bar()函數(shù)的時,內(nèi)部執(zhí)行foo()儡陨,先從bar的執(zhí)行上下文中的活動對象中查找是否有foo褪子,barcontext.AO中有foo量淌,進入foo的執(zhí)行上下文,發(fā)現(xiàn)沒有x嫌褪,返回bar執(zhí)行上下文的活動對象中中查找到有x呀枢。所以x的值為30
13. 以下代碼輸出什么? 寫出作用域鏈的查找過程偽代碼
結(jié)果為30
(function(){console.log(x))()是立即執(zhí)行函數(shù)表達式,會從當(dāng)前的活動對象中查找x笼痛,如果沒有就從bar里面找到了x裙秋,所以x為30
14以下代碼輸出什么? 寫出作用域鏈查找過程偽代碼
結(jié)果為:undefined 缨伊,5 摘刑,16 ,20 刻坊,200