1. 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別
- 函數(shù)聲明就是定義一個(gè)函數(shù),如以下例子
function text(){ //函數(shù)聲明 console.log(1); }
- 函數(shù)表達(dá)式就是讓變量等于一個(gè)函數(shù),也具有聲明函數(shù)的作用(因此后面要加分號(hào)),如
var a =function text() { console.log(1); };
- 區(qū)別在于:雖然兩者都有聲明函數(shù)的作用,但是函數(shù)聲明能使整個(gè)函數(shù)提升(就是能在全局任何時(shí)候調(diào)用函數(shù)),但是函數(shù)表達(dá)式只讓變量提前,只起到變量提升的作用,必須等到解析器執(zhí)行到他所在的代碼才會(huì)被真正執(zhí)行(就是倘若在表達(dá)式之前調(diào)用函數(shù),會(huì)發(fā)生錯(cuò)誤,只能在表達(dá)式之后調(diào)用函數(shù))
2.什么是變量的聲明前置?什么是函數(shù)的聲明前置
- 變量的聲明前置就是把變量(var a不是var a =3//a=3并沒(méi)有提升)提升到前面(最前面)
- 函數(shù)的聲明前置把函數(shù)提升到前面(函數(shù)表達(dá)式并不可以)
3.arguments 是什么
在函數(shù)內(nèi)部,你可以使用arguments對(duì)象獲取到該函數(shù)的所有傳入?yún)?shù),能展示數(shù)組的實(shí)參是什么(形參不可以)
參考:JavaScript arguments對(duì)象
4.函數(shù)的重載怎樣實(shí)現(xiàn)?
JavaScript并沒(méi)有重載的功能,因此可以通過(guò)arguments實(shí)現(xiàn)
5.立即執(zhí)行函數(shù)表達(dá)式是什么机蔗?有什么作用?
- 立即執(zhí)行函數(shù)表達(dá)式(Immediately-Invoked Function Expression),是將函數(shù)定義放在一個(gè)圓括號(hào)里,讓JavaScript引擎將其理解為一個(gè)表達(dá)式膀斋,再在函數(shù)的定義后面加一個(gè)()菠隆,以達(dá)到定義函數(shù)后立即調(diào)用該函數(shù)的效果读整。
(function fn(){}())
- 作用就是立即執(zhí)行函數(shù)表達(dá)式并不會(huì)改變?nèi)肿兞?**通常是用來(lái)立刻調(diào)用
![Uploading 作用域鏈展示_922803.png . . .]
函數(shù)得出結(jié)果)- 定義的變量只是局部變量
- 可以將獨(dú)立的功能封裝在自包含模塊中。
6..什么是函數(shù)的作用域鏈
- 作用域:作用域就是變量與函數(shù)的可訪問(wèn)范圍罐氨,即作用域控制著變量與函數(shù)的可見(jiàn)性和生命周期臀规。在JavaScript中,變量的作用域有全局作用域和局部作用域兩種栅隐。
例子如下:
JavaScript 開(kāi)發(fā)進(jìn)階:理解 JavaScript 作用域和作用域鏈
代碼
1