1.函數的使用
1.1 聲明函數和調用函數
//1.聲明函數
//function 函數名() {
// //函數體
//}
function sayHi() {
console.log('hi~');
}
//2.調用函數
//函數名();
sayHi(); //hi~
案例:利用函數計算1~100之間的累加和
function getSum() {
sum = 0;
for (var i = 1; i <= 100; i++) {
sum = sum + i;
}
console.log(sum);
}
getSum(); //5050
getSum(); //5050
2.函數的參數
2.1語法格式
//1.聲明
//function 函數名(形參1, 形參2,...) {
// //函數體
//}
//2.調用
//函數名(實參1, 實參2,...);
function cook(aru) {
console.log(aru);
}
cook('酸辣土豆絲'); //酸辣土豆絲
說明:
- 函數的參數可以有,也可以沒有,個數不限
2.2案例:利用函數求任意兩個數之和
function getSum(a, b) {
console.log(a + b);
}
getSum(1, 5); //6
getSum(66, 66); //132
2.3案例:利用函數求任意兩個數之間的數之和
function getSum(a, b) {
var sum = 0;
for (var i = a; i <= b; i++) {
sum = sum + i;
}
console.log(sum);
}
getSum(1, 100); //5050
getSum(2, 6); //20
說明:形參可以是看作兩個不用聲明的變量
2.4函數實參和形參不匹配問題
function getSum(num1, num2) {
console.log(num1 + num2);
}
//1.如果實參的個數和形參的個數一致則正常輸出
getSum(1, 2); //3
//2.如果實參個數多於形參個數則會取到形參的個數
getSum(1, 2, 3); //3
//3.如果實參個數小於形參個數
//由於形參是可以看作不用聲明的變量 num2是一個變量但是沒有接收值,那num2就是undefined
getSum(1); //NaN
//建議:盡量讓實參的個數和形參的個數相匹配
3.函數的返回值
3.1語法格式
//格式
function 函數名() {
return 需要返回的結果
}
函數名();
3.2運用
function getResult() {
return 666;
}
getResult();
console.log(getResult()); //666
3.3之前程序的改進
function cook(aru) {
return aru;
}
console.log(cook('酸辣土豆絲')); //酸辣土豆絲
function getSum(num1, num2) {
return num1 + num2;
}
console.log(getSum(1, 2)); //3
3.4案例
案例1:利用函數求兩個數的最大值
方法1:
function getMax(a, b) {
if (a > b) {
return a;
} else {
return b;
}
}
console.log(getMax(1, 5)); //5
console.log(getMax(10, 5)); //10
方法2:
function getMax(a, b) {
return a > b ? a : b;
}
console.log(getMax(1, 5)); //5
console.log(getMax(10, 5)); //10
案例2:利用函數求數組中的最大值
function getArrMax(a) {
var len = a.length;
var max_value = a[0];
for (var i = 1; i < len; i++) {
if (a[i] > max_value) {
max_value = a[i]
}
}
return max_value;
}
var re = getArrMax([5, 2, 99, 101, 67, 77]);
console.log(re); //101
3.5注意事項
- return除了可以返回函數值之外,還可以終止函數,即return之后的代碼不會被執行
- return只能返回一個值,如果用逗號隔開多個值,以最后一個值為准
//1.終止函數
function getSum(num1, num2) {
return num1 + num2;
alert('我是不會被執行的哦!');
}
console.log(getSum(1, 2));
//2.return只能返回一個值
function fn(num1, num2) {
//如果用逗號隔開多個值,以最后一個值為准 返回num2
return num1, num2;
}
console.log(fn(1, 2)); //2
案例:求兩個數的加減乘除
function getResult(num1, num2) {
return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
}
var re = getResult(6, 3);
console.log(re);
- 若函數沒有return 則返回的是undefined
function fun() {
}
console.log(fun());//undefined
3.6 break continue return的區別
- break:結束當前的循環
- continue:跳出本次循環,繼續執行下次循環
- return: 不僅可以退出循環還可以返回return語句中的值,同時還可以結束當前函數體內的代碼
3.7作業
作業1:寫一個函數,用戶輸入任意兩個數字的任意算數運算,彈出運算后的結果(簡單計算器)
function cal() {
num1 = prompt('請輸入第一個數');
symbol = prompt('請輸入運算符號');
num2 = prompt('請輸入第二個數');
switch (symbol) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
return num1 / num2;
}
}
alert(cal());
作業2:寫一個函數,用戶輸入三個不同的數值,返回最大值
function maxnum(num1, num2, num3) {
if (num1 > num2) {
if (num1 > num3) {
return num1;
} else {
return num3;
}
} else {
if (num2 > num3) {
return num2;
} else {
return num3;
}
}
}
作業3:寫一個函數,用戶輸入一個數,判斷是否是素數(可被1和自身整除的數)
function prime(num) {
for (var i = 2; i <= num / 2; i++) {
if (num % i == 0) {
return num + '不是素數';
}
}
return num + '是素數';
}
alert(prime(2));//2是素數
4.arguments的使用
之前提到過函數的實參和形參最好匹配上,否則如果實參多了可能會用不上,實參少了可能會出問題。當我們不確定有多少個參數傳遞的時候,可以用arguments來獲取。在JavaScript中,arguments是當前函數的一個內置對象。所有的函數都內置了一個arguments對象,arguments對象中存儲了傳遞的所有實參。
偽數組
arguments展示形式是一個偽數組,因此可以進行遍歷,偽數組具有以下特點:
- 具有length屬性
- 按索引方式存儲數據
- 可以遍歷數組
- 不具有數組的push、pop等方法
//arguments的使用
function fn() {
console.log(arguments); //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]arguments是一個偽數組里面存儲了所有傳遞過來的實參
//arguments是偽數組
console.log(arguments.length); //有長度3
console.log(arguments[2]); //可索引3
//可以按數組的方式遍歷arguments=[1,2,3];
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
fn(1, 2, 3);
利用arguments求任意兩個數的最大值
function maxnum() {
var max = arguments[0];
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
rel = maxnum(2, 5, 66, 2, 69, 129, 333, 2, 0);
console.log(rel);
5.函數的案例
5.1案例1
要求:利用函數封裝的方法翻轉任意一個數組
//利用函數封裝的方法翻轉任意一個數組
function reverArr(arr) {
var arrNew = [];
for (i = arr.length - 1; i >= 0; i--) {
arrNew[arrNew.length] = arr[i];
}
return arrNew;
}
var a = [1, 2, 3, 4, 6, 8, 2, 6, 8];
var re = reverArr(a);
console.log(re);
5.2案例2
要求:利用函數封裝的方式對數組排序(冒泡排序)
//冒泡排序
//對於i的范圍:1個數,不用排; 兩個數,排1趟; 三個數 排2趟。。。n個數,排n-1趟
//對於j的范圍,n個數:第一趟比較n-1次,第二趟比較n-2次。。。第n-1趟比較1次
function sort(arr) {
var temp;
for (i = 0; i < arr.length - 1; i++) {
for (j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
console.log(sort([4, 1, 6, 88, 9, 3, 666])); //(7) [1, 3, 4, 6, 9, 88, 666]
5.3案例3
要求:輸入一個年份,判斷是否是閏年(閏年:能被4整除且不可以被100整除或者可以被400整除)
<script>
//輸入一個年份,判斷是否是閏年(閏年:能被4整除且不可以被100整除或者可以被400整除)
function leap(year) {
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
console.log(leap(2000)); //true
console.log(leap(1999)); //false
</script>
5.4一個函數可以調用另一個函數
案例4
要求:用戶輸入年份,輸出當年二月份的天數,即如果用戶輸入的是閏年二月份就是29天,如果用戶輸入的是平年,二月份就是28天
function backDays() {
year = prompt('用戶輸入年份');
if (leap(year)) {
return alert(year + '年的二月份天數為' + 29 + '天');
}
return alert(year + '年的二月份天數為' + 28 + '天');
}
backDays()
//輸入一個年份,判斷是否是閏年(閏年:能被4整除且不可以被100整除或者可以被400整除)
function leap(year) {
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
6.函數的兩種聲明方式
- 利用函數關鍵自定義函數
- 函數表達式
//函數的2種聲明方式
//1. 利用函數關鍵自定義函數(命名函數)
function fn() {
}
fn();
//2.函數表達式 匿名函數
//var 變量名=function(){}; 注意fun是變量名而不是函數名
var fun = function(aru) {
console.log('我是函數表達式'); //我是函數表達式
console.log(aru); //我是pink老師
}
fun('我是pink老師');
//(1)fun是變量名 不是函數名
//(2)函數表達式聲明方式和聲明變量差不多,只不過變量里存的是值,函數表達式里存的是函數
//函數表達式也可以進行傳遞參數
