函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別
- 函數(shù)聲明
function example( ){
console.log(a1)
}
- 函數(shù)表達(dá)式
var hanShu=function example( ) {
consolo.log(a2)
}
函數(shù)表達(dá)式將一個(gè)函數(shù)聲明賦值給一個(gè)變量。
兩者有一個(gè)明顯的區(qū)別即是函數(shù)聲明會(huì)前置,而函數(shù)表達(dá)式不行。
什么是變量的聲明前置?什么是函數(shù)的聲明前置
變量聲明前置
變量的聲明(注意不包含變量初始化)會(huì)被提升(置頂)到聲明所在的上下文霎苗。也就是說(shuō),在變量的作 用域內(nèi)榛做,不管變量在何處聲明唁盏,都會(huì)被提升到作用域的頂部,但是變量初始化的順序不變检眯。函數(shù)聲明前置
函數(shù)聲明在JS解析時(shí)進(jìn)行函數(shù)提升厘擂,因此在同一個(gè)作用域內(nèi),不管函數(shù)聲明在哪里定義锰瘸,該函數(shù)都可以進(jìn)行調(diào)用
參考資料-變量提升
參考資料-函數(shù)聲明前置
對(duì)于arguments 的理解
arguments是函數(shù)自帶的一個(gè)參數(shù)刽严,他可以調(diào)用函數(shù)的參數(shù)值
例如:
function message( name, age , tel){
alert(arguments[0]);
}
arguments對(duì)象類(lèi)似于數(shù)組,通過(guò)[0],[1],[2]等避凝,來(lái)調(diào)用函數(shù)內(nèi)第一個(gè)舞萄,第二個(gè)眨补,第三個(gè)參數(shù)。
同時(shí)還有一個(gè)arguments.length 屬性可以知道有多少個(gè)參數(shù)傳遞給了函數(shù)倒脓。
在Javascript中函數(shù)的重載怎樣實(shí)現(xiàn)
同種函數(shù)擁有唯一的函數(shù)名與形參撑螺,相同名字的函數(shù),參數(shù)個(gè)數(shù)不同或者順序不同都被認(rèn)為是不同的函數(shù)崎弃,稱為函數(shù)重載甘晤。
JavaScript并沒(méi)有函數(shù)重載這個(gè)特性,因?yàn)橹灰瘮?shù)名相同JS就認(rèn)為是同一個(gè)函數(shù)饲做。后面出現(xiàn)的函數(shù)后覆蓋前面出現(xiàn)的函數(shù)线婚。
但是我們可以通過(guò)判斷傳入?yún)?shù)的數(shù)量和類(lèi)型,來(lái)進(jìn)行重載的模仿盆均。
function name( ) {
if (arguments.length==1){
console.log(arguments[0]+10);
}else if(arguments.length==2){
console.log(arguments[0]+arguments[1]);
}
}
立即執(zhí)行函數(shù)表達(dá)式是什么塞弊?有什么作用?
- 立即執(zhí)行函數(shù):
用括號(hào)將函數(shù)包裹起來(lái),同時(shí)后面再加一個(gè)括號(hào)
(function example( ) {
console.log(a)
})( )
因?yàn)閖avascript語(yǔ)言中沒(méi)有塊級(jí)作用域缀踪,可以用次將函數(shù)包裹,避免變量的相互影響虹脯,減少錯(cuò)誤驴娃。
什么是函數(shù)的作用域鏈
函數(shù)的作用域鏈?zhǔn)侵父鶕?jù)代碼的結(jié)構(gòu),形成一個(gè)單獨(dú)的作用域循集,而作用域之間又有關(guān)聯(lián)唇敞,形成一個(gè)鏈狀的結(jié)構(gòu),構(gòu)成作用域咒彤。