1. 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別
- 函數(shù)聲明就是定義一個函數(shù),如以下例子
function text(){ //函數(shù)聲明 console.log(1); }
- 函數(shù)表達(dá)式就是讓變量等于一個函數(shù),也具有聲明函數(shù)的作用(因此后面要加分號),如
var a =function text() { console.log(1); };
- 區(qū)別在于:雖然兩者都有聲明函數(shù)的作用,但是函數(shù)聲明能使整個函數(shù)提升(就是能在全局任何時候調(diào)用函數(shù)),但是函數(shù)表達(dá)式只讓變量提前,只起到變量提升的作用,必須等到解析器執(zhí)行到他所在的代碼才會被真正執(zhí)行(就是倘若在表達(dá)式之前調(diào)用函數(shù),會發(fā)生錯誤,只能在表達(dá)式之后調(diào)用函數(shù))

函數(shù)表達(dá)式前調(diào)用函數(shù).png

函數(shù)表達(dá)式后調(diào)用函數(shù).png
2.什么是變量的聲明前置?什么是函數(shù)的聲明前置
- 變量的聲明前置就是把變量(var a不是var a =3//a=3并沒有提升)提升到前面(最前面)
- 函數(shù)的聲明前置把函數(shù)提升到前面(函數(shù)表達(dá)式并不可以)
3.arguments 是什么
在函數(shù)內(nèi)部,你可以使用arguments對象獲取到該函數(shù)的所有傳入?yún)?shù),能展示數(shù)組的實參是什么(形參不可以)

arguments實現(xiàn).png
4.函數(shù)的重載怎樣實現(xiàn)?
JavaScript并沒有重載的功能,因此可以通過arguments實現(xiàn)

arguments重載.png
5.立即執(zhí)行函數(shù)表達(dá)式是什么?有什么作用?
- 立即執(zhí)行函數(shù)表達(dá)式(Immediately-Invoked Function Expression),是將函數(shù)定義放在一個圓括號里,讓JavaScript引擎將其理解為一個表達(dá)式,再在函數(shù)的定義后面加一個(),以達(dá)到定義函數(shù)后立即調(diào)用該函數(shù)的效果。
(function fn(){}())- 作用就是立即執(zhí)行函數(shù)表達(dá)式并不會改變?nèi)肿兞?**通常是用來立刻調(diào)用
![Uploading 作用域鏈展示_922803.png . . .]
函數(shù)得出結(jié)果)- 定義的變量只是局部變量
- 可以將獨立的功能封裝在自包含模塊中。
6..什么是函數(shù)的作用域鏈
- 作用域:作用域就是變量與函數(shù)的可訪問范圍,即作用域控制著變量與函數(shù)的可見性和生命周期。在JavaScript中,變量的作用域有全局作用域和局部作用域兩種。
例子如下:

作用域鏈展示.png
JavaScript 開發(fā)進階:理解 JavaScript 作用域和作用域鏈
代碼
1

task-1.png

task-2.png

task-3.png

task-4.png

task-5.png

task-6.png

task-7.png

task-8.png

task-9.png

task10.png