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