1:函式案例
2:函式其他
3:作用域
4:預解析
1:函式案例
// 1: 求一組數中的最大值,最小值,求和
// 2:求階乘
// 3:判斷質數
// 4:通過函式實現陣列的反轉
// 5:求乙個數字的階乘
// 6:費布那切數列
// 7:求乙個數字的階乘和
// 8:氣泡排序
// 1: 求一組數中的最大值,最小值,求和
function allnumber(num) //end if
if (max < num[i]) //end if
sum += num[i];
}var arr = [min, max, sum];
return arr;
//將三個變數用陣列的方式返回(返回到函式裡面,也就是allnumber()),這是最巧妙的地方
}var result = allnumber([1, 9, 2, 8]);
console.log("最小值" + result[0] + "最大值" + result[1] + "求和" + result[2]);
// 2:求階乘
function jiecheng(n)
return sum;
}console.log(jiecheng(3))
// 3:判斷質數
function zhishu(num)
}return true;
}console.log(zhishu(8) ? "是質數" : "不是質數"); //這裡zhishu(8) 接收的是return true ,含義是是質數
// 4:通過函式實現陣列的反轉
function reverse(arr)
return arr;
}console.log(reverse([1, 2, 3, 4, 5, 6, 7, 8, 9]))
// 5:求乙個數字的階乘
var f2 = function (num)
return sum;
}console.log(f2(4))
// 6:遞迴費布那切數列
function f6(n)
return f6(n - 1) + f6(n - 2);
}console.log(f6(4));
var ff6 = function (n)
return ff6(n - 1) + ff6(n - 2);
}console.log(ff6(4));
// 6.1普通實現翻番
function fff6(n)
for (var i = 3; i <= n; i++)
return sum;
}console.log(fff6(3))
// 7:求乙個數字的階乘和,前面有乙個函式已經求出單個階乘,現在只是把他們相加即可
function factoriala(num1)
return sum1;
}console.log(factoriala(3));
// 8:氣泡排序
var f8 = function (array) }}
return array;
}console.log(f8([12, 78, 5, 4, 23, 15, 98, 422, 18, 62]))
2:函式其他
2.1arguments物件偽陣列
偽陣列arguments獲取偽陣列的值
var fn = function ()
return sum;
}console.log(fn(1, 9))
9)])
//這裡有個坑,明明是進行進行陣列的遍歷迴圈,
// 但是進行輸出的時候,陣列的形式卻不行,原因是arguments可以獲取偽陣列的值,
// 但他終歸不是陣列,所以不能用陣列的形式進行傳值
2.1函式的其他定義方式
函式定義有命名函式,匿名函式,函式自定義
命名函式:定義:function fn(){} 呼叫fn();
匿名函式:定義:function (){} ,呼叫:?沒有函式名,該怎麼呼叫?引出了兩種方法,一種是函式表示式(定義)var fn = function(){}呼叫:fn()
另一種是:函式自定義,宣告的時候,直接呼叫(一次性)
(function(){})()
2.2函式也是一種資料型別
function f1()
console.log(typeof f1); //function
2.3:函式作為引數使用
函式裡面的引數可以是任意型別,下面說函式作為引數使用
function f2(fn)
function f3()
f2(f3); //這裡有乙個注意點;函式作為引數使用,是函式名,還是函式名+();
// 因為函式作為引數呼叫的時候,主函式裡面的呼叫是 fn(),缺的是函式**,
// 這時候函式作為引數只要提供**就可以,而函式名裡面就是**,所以傳值,只傳函式名就可以
2.4函式作為返回值使用
function f4()
var ff = f4();
ff();
3:作用域
// 作用域
//1:全域性變數:用var 宣告,如果頁面不關閉,那麼就不會釋放,會佔空間,消耗記憶體
//2:區域性變數:在函式內部定義的變數
// 3:js沒有快級作用域,但是函式除外(這裡快級作用域相當於區域性作用域)
// 4:隱式全域性變數:變數宣告的時候沒有var,如果在函式內部定義了乙個隱式全域性變數,外部是可以訪問的
// 5:全域性變數不會被刪除,但是隱式全域性變數可以被刪除
4:預解析
// 首先需要了解的是瀏覽器遇到js**,會有js解析器進行兩步操作,預解析+執行**
// 預解析:就是提前解析**
//預解析就兩部分:變數宣告提前;函式宣告提前
// 先看變數宣告
console.log(num); //undefined
var num = 10;
// 函式宣告提前
function f1()
f1(); //我是第二個f1
function f1()
f1() //我是第二個f1
// 為什麼輸出這樣的結果,其實是函式宣告提前的原因,而且有函式呼叫在函式宣告前的**,首先會進行函式宣告提前,而且如果函式名一樣,後面的會覆蓋前面的**
function f1()
function f1()
f1(); //我是第二個f1
f1() //我是第二個f1
// 函式宣告提前和變數宣告提前的混合用法
var num = 10;
f2()
function f2()
// 解釋: 函式呼叫之前,肯定是函式的宣告,所以這裡是函式宣告提前
var num = 10;
function f2()
f2()
混淆用法
f3()
function f3()
var num3 = 10;
// 下面看執行過程:首先函式宣告提前,其次變數宣告提前.這裡是變數宣告,但是沒有賦值,所以是ubdefined
var num3;
function f3()
f3()
num3 = 10;
// 函式宣告提前和變數宣告提前的混合用法
console.log(a); //**
function a()
var a = 1;
console.log(a); //1
// 解析過程
var a;
function a()
console.log(a);
a = 1;
console.log(a);
// 函式宣告提前和變數宣告提前的混合用法
var a = 18;
f5();
function f5()
// 函式宣告提前和變數宣告提前的混合用法
f6();
console.log(a); //報錯
console.log(b); //6
console.log(c); //6
function f6()
// 解釋
function f6()
f6();
console.log(a); //報錯 ,a是區域性變數,不會跑到函式外面,所以這裡a既沒有宣告,也沒有賦值。憑空出現,所以報錯
console.log(b); //6
console.log(c); //6
f7(); //不能呼叫,報錯
var f7 = function ()
//解釋,函式表示式,進行變數提公升,var f7,下面剩下
// f7 = function () ,所以 var f7; f7()肯定是報錯的
var f7;
f7();
f7 = function ()
這也就從側面說明,預解析就兩方面:
變數提公升
函式宣告提公升,
(函式表示式用的也是變數提公升)
前端全棧學習第十二天 js第二天 基礎
1 一元運算子 2 順序控制 3 分支結構 if,if else if else if else if else,switch case 三元表示式 4 迴圈結構 while,do while,for,for in 後期 5 案例 每個三遍 1 一元運算子 1 正常的單個 在前,在後,都是在自增 v...
前端全棧學習第十二天 js第三天 基礎
1 陣列 氣泡排序 2 函式 1 陣列 1 陣列的作用,可以一次儲存多個資料 2 建立陣列有兩種方式 通過建構函式建立乙個陣列 var arr new array 5 陣列長度為5,空陣列 var arr1 new array 5,1 陣列長度為2,裡面有5,1兩個元素 通過字面量建立乙個陣列 va...
前端全棧學習第十二天 js第六天 基礎
主要是內建物件的介紹和例子 1 math的兩個例子 2 date例子 1.1 使用math實現系統的max方法 1 使用系統自帶的math.max 方法 var max math.max 12,45,78,999,111111 console.log max 2 使用帶參的函式 function g...