函數就是把特定功能的代碼抽取出來,使之成爲程序中的一個獨立實體,起個名字(函數名)。數組
正如函數的概念, 咱們能夠根據代碼須要, 將特定的功能用函數來包裹瀏覽器
函數能夠分爲:內置函數 和 自定義函數安全
內置函數:dom
是官方提供好的函數,能夠直接使用 如: alert(), isNaN(), console.log() parseInt()等
語法格式:函數
function 函數名() { 代碼塊; }
注意:code
例如:定義一個函數 ShowTips對象
function ShowTips(x,y){ alert('我要飛得更高'); }
函數的調用方式: 函數名()遞歸
function ShowTips(x,y){ alert('我要飛得更高'); } ShowTips();
注意:
1.調用函數後會執行函數內部的代碼塊;
2.函數在不調用的狀況下是不會執行的, 只有調用後函數中的代碼纔會執行事件
語法格式:ip
function 函數名(參數1,參數2,……) { 執行語句; return 返回值; }
注意:
案例:定義一個函數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));