1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別
- 聲明函數(shù)
使用function可以聲明一個函數(shù)

Paste_Image.png
- 函數(shù)表達(dá)式

Paste_Image.png
- 區(qū)別
聲明函數(shù)聲明不用放在調(diào)用前面,函數(shù)表達(dá)式聲明必須放在調(diào)用前面,函數(shù)表達(dá)式是一個賦值的過程
2.什么是變量的聲明前置?什么是函數(shù)的聲明前置
- 在一個作用域下VAR聲明的變量和Function聲明的函數(shù)會前置。
- 在函數(shù)內(nèi)部VAR聲明的變量同樣前置。
- 當(dāng)命名沖突時先前置后覆蓋。
3. arguments 是什么

Paste_Image.png
- 在函數(shù)內(nèi)部可以使用arguments對象獲取該函數(shù)的所有傳入?yún)?shù)。
4.函數(shù)的"重載"怎樣實現(xiàn)
- 在JS中沒有重載,同名函數(shù)會被覆蓋,但可以在函數(shù)體針對不同的參數(shù)調(diào)用相應(yīng)的邏輯。

Paste_Image.png
5.立即執(zhí)行函數(shù)表達(dá)式是什么?有什么作用
(function(){
var a = 1;
})
( function fn1() {});
// 在數(shù)組初始化器內(nèi)只能是表達(dá)式
[function fn2() {}];
// 逗號也只能操作表達(dá)式
, function fn3() {};
- 作用:隔離作用域。
6.求n!,用遞歸來實現(xiàn)
1.自己調(diào)用自己;
2.設(shè)定終止條件;
4.優(yōu)點(diǎn):算法簡單;
5.缺點(diǎn):效率低;
function factor(n){
if(n==1||n==0){
return 1}else if(n<0){
return false}
return n * factor(n-1)
}
7. 以下代碼輸出什么?
function getInfo(name, age, sex){
console.log('name:',name);
console.log('age:', age);
console.log('sex:', sex);
console.log(arguments);
arguments[0] = 'valley';
console.log('name', name);
}
getInfo('饑人谷', 2, '男');
getInfo('小谷', 3);
getInfo('男');
輸出
getInfo('饑人谷', 2, '男');
"name" "饑人谷";"age" "2"; "sex" "男";[object Arguments] {0: "饑人谷",1: 2,2: "男"}
getInfo('小谷', 3);
"name:""小谷";"age:"3";sex:"undefined;[object Arguments] { 0: "小谷",1: 3}"name""valley"
getInfo('男');
"name:""男""age:"undefined"sex:"undefined[object Arguments]{0: "男"}"name""valley"
8. 寫一個函數(shù),返回參數(shù)的平方和?
function sumOfSquares(){
var sum=0;
for(var i=0;i<arguments.length;i++){
sum += arguments[i] * arguments[i]
}
return sum}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result) //29
console.log(result2) //10
9. 如下代碼的輸出?為什么
console.log(a);
var a = 1;
console.log(b);
輸出:
var a;
console.log(a); //undefined
a=1;
console.log(b);//ReferenceError: b is not defined
10. 如下代碼的輸出?為什么
sayName('world');
sayAge(10);
function sayName(name){
console.log('hello ', name);
}
var sayAge = function(age){
console.log(age);
};
輸出
hello world Uncaught TypeError: sayAge is not a function//函數(shù)表達(dá)式不會像函數(shù)聲明一樣 被前置,所以執(zhí)行到sayAge(10);這一句時函數(shù)sayAge未被聲明,此時它還不是一個函數(shù)
11. 如下代碼輸出什么? 寫出作用域鏈查找過程偽代碼

Paste_Image.png
12. 如下代碼輸出什么? 寫出作用域鏈查找過程偽代碼

Paste_Image.png
13. 以下代碼輸出什么? 寫出作用域鏈的查找過程偽代碼

Paste_Image.png
14. 以下代碼輸出什么? 寫出作用域鏈查找過程偽代碼

Paste_Image.png

Paste_Image.png