JavaScript 函數簡介
JS函數的概念
函數就是把特定功能的代碼抽取出來,使之成爲程序中的一個獨立實體,起個名字(函數名)。
函數的作用
正如函數的概念, 我們可以根據代碼需要, 將特定的功能用函數來包裹
使用函數的好處
- 函數可以在同一個程序或其他程序中多次重複使用(通過函數名調用)
- 使程序變得更簡短而清晰
- 有利於程序維護
函數的分類
函數可以分爲:內置函數 和 自定義函數
-
內置函數:
是官方提供好的函數,可以直接使用 如: alert(), isNaN(), console.log() parseInt()等
- 自定義函數:
是用戶自己定義的函數, 用戶可以根據實際需求, 對特定的功能使用函數來封裝
函數定義和調用
- 函數簡單定義
語法格式:
function 函數名() {
代碼塊;
}
注意:
- 必須使用function關鍵字, 且爲小寫, 函數名自定義
- 函數名的命名規則和變量名一致
- 函數名後必須寫圓括號()
例如:定義一個函數 ShowTips
function ShowTips(x,y){
alert('我要飛得更高');
}
- 函數調用
函數的調用方式: 函數名()
function ShowTips(x,y){
alert('我要飛得更高');
}
ShowTips();
注意:
1.調用函數後會執行函數內部的代碼塊;
2.函數在不調用的情況下是不會執行的, 只有調用後函數中的代碼纔會執行
- 函數標準定義
語法格式:
function 函數名(參數1,參數2,……)
{
執行語句;
return 返回值;
}
注意:
- 函數名後圓括號()中的參數數量不定, 也可以沒有; (根據功能需要)
- return關鍵字的作用是將某個值返回, 如果沒有返回值則默認返回undefined;
案例:定義一個函數Add求兩個數相加之和
function Add(x,y){
var sum=x+y;
return sum;
}
var result=Add(2,3); //函數調用
alert(result);
注意:
1.函數體語句執行到return時,函數就終止代碼執行(return後的代碼不會執行)
2.如果return後有返回值,則把這個值返回到函數調用執行的地方
形參和實參
形參:
形參就是在函數定義時,函數名後面的參數;
函數的形參跟變量是一樣使用,且不能用var修飾
實參:
實參就是調用時,函數名後面的參數
如: 之前定義的函數Add中: x和y是形參, 2和3是實參
function Add(x,y){
var sum=x+y;
return sum;
}
var result=Add(2,3); //函數調用
alert(result);
注意:
1.在傳值調用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。
2.因此在函數調用過程中,當形參值發生改變,而實參中的值不會變化。
arguments
arguments:函數內部隱藏的數組對象,保存着實參的信息,可以直接使用
函數在傳遞參數時就是用這個數組arguments來保存的
arguments.length:保存着實參的數量
函數的作用域
作用域: 就是起作用的範圍。或者說有效範圍; 這裏涉及到另外兩個概念。
- 局部變量:
定義在函數內部的變量,這個變量只能在函數內部使用,即作用域範圍只是函數內部,另外,形參也是局部變量.
ps:函數內的變量使用遵循:就近原則
- 全局變量:
全局變量就是定義在函數外部的變量,這個變量在任何函數中都有效,即作用域範圍是當前文件的任何地方.
JavaScript默認有一個全局對象window,全局作用域的變量實際上被綁定到window的一個屬性:
注意: 在定義變量時, 如果不寫關鍵字var也是合法的, 且是全局變量, 但是這樣寫不安全,容易在其他地方被更改, 所以我們在函數中寫變量要加上var
- 變量聲明提前
語句:
var str1='abc';
var sum=str1+str2;
var str2='hello';
console.log(sum); //abcundefined
//JavaScript引擎自動提升了變量str2的聲明,但不會提升變量str2的賦值
函數的嵌套
函數的嵌套: 函數內部可以再包含其他函數;
函數之間允許相互調用(不能同時調用),也允許向外調用,
如果互相同時調用:就會出現死循環
對象函數的定義和調用
對象函數的定義
var 對象={
屬性名:屬性值,
屬性方法名:匿名函數
}
調用: 對象.屬性方法名()
事件驅動:
因爲函數不會主動執行, 只有當調用的時候纔會執行函數中的代碼, 在前面的dom操作示例中,我們點擊了按鈕才觸發函數調用
所有的函數,沒有調用不會執行,那麼在我們瀏覽器中函數調用的源頭在何處,就是事件, 只有使用事件去驅動, 函數才被調用; 如: onclick: 點擊事件
示例: 點擊搜索按鈕調用函數打印出文本框內容, 再清空文本框的內容
函數的遞歸調用
遞歸調用:
函數可以自己調用自己, 成爲函數的遞歸調用;
function fact(num){
var sum;
if (num<=1){
sum=1;
}else{
sum=num*fact(num-1);
}
return sum;
}
alert(fact(6));