函式及應用例子
技術標籤:筆記
函式
作用
1.簡化程式碼
2.方便維護
3.提高開發效率
4.提高了程式碼的複用性,減少程式碼冗餘
格式:
function 函式名(引數…){
函式執行的程式碼(函式體)
}
引數劃分:
- 形參:變數,沒有固定值,可以被改變
- 實參:常量,固定值,不可以被改變
**【注意】**函式先定義後呼叫
分類
1.內建函式(官方提供的函式,系統自身擁有函式)
alert();
document.write();
console.log();
parseInt();
parseFloat();
2.自定義函式
根據引數和返回值的不同,可將函式分為四種。
1.無引數無返回值
function sum() {
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum += i;
}
document.write(sum);
}
sum();
2.有引數無返回值
function sum(n) {
var sum = 0;
for (var i = 1; i <= n; i++) {
sum += i;
}
document.write(sum);
}
sum(100);
3.無引數有返回值
function sum() {
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
var a = sum();
alert(a);
4.有引數有返回值
function sum(n) {
var sum = 0;
for (var i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
var a = sum(100);
alert(a);
封裝函式
步驟:
1.確定函式的執行程式碼:函式體。
2.找出變數(不確定值。),將其設定為形參
3.如果需要對返回結果進行不同的處理,則定義返回值。
三個數比較大小
function compare(a, b, c) {
var temp;
if (a > b) {
temp = a;
a = b;
b = temp;
}
//a與b比較,若a>b,則a與b的值交換,a一定比b小
if (b > c) {
temp = c;
c = b;
b = temp;
}
//b與c比較,若b>c,則b與c的值交換,c一定比b大
if (a > b) {
temp = a;
a = b;
b = temp;
}
//因為a一定比b小 、c一定比b大,那麼就已經找到最大值了c,只需要讓a與b在比較一次就可以了
return a + "<" + b + "<" + c;
}
alert(compare(4, 8, 1));
如 4,8,1三個數分別為a,b,c,a與b 比較(a一定比b小),a=4、b=8;b與c 比較(c一定比b大),b=1、c=8;a與b 比較(a一定比b小),a=1、b=4,
隨機生成四位數的驗證碼
方法1
// Math.random();
// 獲取0-1之間的隨機數
function encryption() {
var code = parseInt(Math.random() * 10000);
if (code < 10) {
code = "000" + code;
} else if (code < 100) {
code = "00" + code;
} else if (code < 1000) {
code = "0" + code;
}
return code;
}
document.write(encryption())
方法2
function encryption() {
var code = "";
for (var i = 0; i < 4; i++) {
code += parseInt(Math.random() * 10);
}
return code;
}
document.write(encryption())
對密碼加密
密碼是一個四位整數,需要進行加密.加密演算法為:
1.每個數字都加5,然後用除以10的餘數替代該數字.
2.再講數字的各個位數進行反轉.,
編寫這樣一個函式,傳入原資料,返回加密資料.
方法1
var num = prompt("請輸入一個四位數!");
var a = parseInt(num / 1000);
var b = parseInt(num % 1000 / 100);
var c = parseInt(num % 100 / 10);
var d = num % 10;
var arr = [a, b, c, d];
function encryption(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i] = (arr[i] + 5) % 10;
}
arr.reverse();
var result = arr.join(" ")
return result;
//var str = "";
// for (var i = 0; i < arr.length; i++) {
// str += arr[i];
// }
// return (str);
}
document.write(encryption(arr));
console.log(typeof(encryption(arr)));
方法2
function encryption(num) {
var authCode = compute(parseInt(num / 1000));
var hunderse = compute(parseInt(num % 1000 / 100));
var tens = compute(parseInt(num % 100 / 10));
var unit = compute(num % 10);
}
function compute(num) {
return (num + 5) % 10;
}
var num = prompt("請輸入一個四位數!");
if (num < 10) {
num = "000" + num;
} else if (num < 100) {
num = "00" + num;
} else if (num < 1000) {
num = "0" + num;
}
var result = encryption(num);
arguments
arguments:特殊的類陣列物件,該物件按引數,索引包含的所有引數。
定義一個函式,引數的數量不固定
arguments是用來儲存實參。
當呼叫函式時,函式內的實參就會存放在arguments中。
例子
利用arguments求和
function sum() {
var num = 0;
for (var i = 0; i < arguments.length; i++) {
num += arguments[i];
}
return num;
}
var result = sum(1, 5, 6, 7, 8);
alert(result);
作用域
作用域:變數存在的範圍
全域性變數
直接寫在Script標籤中的變數,在頁面中的任意位置都可以訪問到。
在頁面開啟建立,在頁面關閉時銷燬。
區域性變數
區域性變數是定義在函式內部的變數.這個變數只能在函式內使用.例外,函式中的形參也是區域性變數.
每一次呼叫時建立,呼叫結束會銷燬。
【注意】
如果區域性變數與全域性變數重名,則使用區域性變數。若函式內部沒有找到該變數,則去全域性變數中查詢。
var a = 10;
function sum() {
console.log(a);
}
sum();
變數a是全域性變數,在函式sum()可以呼叫;
var a = 10;
function sum() {
console.log(a);
var a = 5;
}
sum();
函式體內的變數a是區域性變數,在sum()呼叫時會首先找函式體內的區域性變數,有就會呼叫區域性變數,函式體內的a雖然寫在呼叫後面,但是在函式體內的變數宣告,有一個工能,宣告提升:變數宣告無論是在函式體內的那個位置定義的,宣告都會放在函式體最前面;
function sum1() {
console.log(a);
var a = 5;
}
function sum2() {
var a;
console.log(a);
a = 5;
}
//sum12函式體內的程式碼相當於與sum2函式體內的程式碼,這就是函式體內的宣告提升
var a = 10;
function sum(a) {
console.log(a);
}
sum();
這時函式體內呼叫的a是函式sum(a)內的形參a,所以結果為undefined。
var a = 10;
var b = 10;
function sum() {
console.log(a);
var b = 5;
}
console.log(b);
sum();
遞迴
遞迴:函式之間可以互相呼叫,如果函式內部呼叫了其自身,則我們稱其為遞迴呼叫。
特點:
1.函式自己呼叫自己
2.一般情況下還有引數
3.一般情況下有返回值.
方法:
1.找這一次計算與上一次計算的關係。
2.呼叫自身
3.找到函式結束的條件。
兔子繁殖問題
設有一對新生兔子,從第四個月開始每個月初都會生一對兔子,新生的兔子從第四個月開始也會每個月初生一對兔子,按照這個規律,假設兔子沒有死亡,n(n<=20)個月月末後共有多少對兔子。
一月兔 二月兔 三月兔 成熟兔 總數
第一個月 1 0 0 0 1
第二個月 0 1 0 0 1
第三個月 0 0 1 0 1
第四個月 1 0 0 1 2
第五個月 1 1 0 1 3
第六個月 1 1 1 1 4
第七個月 2 1 1 2 6
第8個月 3 2 1 3 9
第9個月 4 3 2 4 13
第10個月 6 4 3 6 19
本月成熟兔:上個月的成熟兔+上上上個月的成熟兔
function rabbit(n) {
if (n<4) {
return 1;
}
return rabbit(n-1)+rabbit(n-3);
}
alert(rabbit(9));
解釋
rabbit(n-1)+rabbit(n-3)會呼叫函式rabbit(n),rabbit(n-1)此時的n-1就是**rabbit(n)中的n、rabbit(n-3))此時的n-3就是rabbit(n)**中的n,如n為9;return rabbit(8)+rabbit(6);,[rabbit(8):return rabbit(7)+rabbit(3);(rabbit(7):return rabbit(6)+rabbit(4);rabbit(3):n<4,return 1);rabbit(6):return rabbit(5)+rabbit(2);]