1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 ?
函數(shù)聲明 function Name(){函數(shù)體}
函數(shù)表達(dá)式 var 變量=function (){};
Javascript 中函數(shù)聲明和函數(shù)表達(dá)式是存在區(qū)別的,函數(shù)聲明在JS解析時進(jìn)行函數(shù)提升,因此在同一個作用域內(nèi),不管函數(shù)聲明在哪里定義,該函數(shù)都可以進(jìn)行調(diào)用。而函數(shù)表達(dá)式的值是在JS運行時確定,并且在表達(dá)式賦值完成后,該函數(shù)才能調(diào)用。
2.什么是變量的聲明前置?什么是函數(shù)的聲明前置?
- 所謂的變量聲明前置就是在一個作用域塊中,所有的變量都被放在塊的開始出聲明
- 而函數(shù)的聲明前置因為JS引擎 將函數(shù)名視同變量名,所以采用function命令聲明函數(shù)時,整個函數(shù)被提升到代碼頭部。采用賦值語句聲明函數(shù)時,函數(shù)在原位置被聲明。
3.argument是什么?
argument是一個類數(shù)組的對象??梢詫?shù)傳入argument對象中,并且能調(diào)出數(shù)組的長度,以及當(dāng)前函數(shù)的參數(shù)。
4.函數(shù)的重載怎樣實現(xiàn)?
允許在同一范圍中聲明幾個功能類似的同名函數(shù),但是這些同名函數(shù)的形式參數(shù)必須不同。但在js中沒有函數(shù)重載的概念,因為即使函數(shù)名相同,參數(shù)不同,也被認(rèn)為是相同的函數(shù)。(例子1)
5.立即執(zhí)行函數(shù)表達(dá)式是什么?有什么作用
語法
(function sum(i){ })( );
(function sum(i){ }( ));
var a= function sum(i){ }( );
不必為函數(shù)命名,避免污染全局變量
函數(shù)內(nèi)部形成了一個單獨的作用域,可以封裝一些外部無法讀取的私有變量。通常只對匿名函數(shù)使用。
6.什么是函數(shù)的作用域鏈
當(dāng)一個函數(shù)被調(diào)用時,他先訪問自身的變量,不存在時就回去訪問父級函數(shù)的變量,知道訪問全局變量為止。這種鏈?zhǔn)降倪^程稱為作用于鏈。只能從內(nèi)到外,不能從外到內(nèi)。