函數其實就是封裝,把可以重複使用的代碼放到函數中,如果需要多次使用同一段代碼,就可以把封裝成一個函數。這樣的話,在你需要再次寫這些代碼的時候,你隻需要調用一次函數就行了。
1.定函數的方式
使用字面量的形式定義函數
ECMAScript
中的函數使用
function
關鍵字來聲明,後面跟
一組參數
及
函數體
。
函數的基本文法如下:
function sum(num1, num2) {
var num3 = num1 + num2;
return num3;
}
這個函數的作用是把兩個值加起來傳回一個結果。函數必須通過調用才會執行,調用這個函數的代碼如下:
2. 使用函數表達式聲明函數
使用Function構造函數聲明函數
函數的傳回值
下面這個函數在執行完
return
語句之後停止并立即退出。是以,位于
return
語句後面的
任何代碼永遠都不會執行
。例如:
function sum(num1, num2) {
var num3 = num1 + num2;
return num3;
alert("hello world"); //永遠不會執行
}
一個函數中可以有多個
return
語句,如下面的這個例子所示:
function max(num1, num2) {
**加粗樣式** if(num1 > num2){
return num1;
}else{
return num2;
}
}
max()
方法的作用是求
兩個數中最大值
的。如果
第一個數比第二個數大
,傳回
第一個數
;否則
傳回第二個數
。代碼中的兩個分支都具有自己的
return
語句,分别用于傳回最大值。
另外,return語句也可以不帶任何傳回值。在這種情況下,函數在停止執行後将傳回undefined。這種方法一般用在需要提前停止函數執行而又不需要傳回值的情況。
function max(num1, num2) {
if(!(num1 && num2)){ //參數隻要有一個為空,函數就什麼也不做,直接傳回
return;
}else if(num1 > num2){
return num1;
}else{
return num2;
}
}
函數的參數
ECMAScript
函數不介意傳遞進來多少參數,也不在乎傳進來的參數是什麼資料類型。也就是說,
即便你定義的函數隻接收2個參數,在調用這個函數的時候也未必一定要傳遞2個參數。可以傳遞1個、3個甚至不傳遞參數,而解析器永遠不會有什麼怨言
。
實際上,傳遞給函數的所有參數都被儲存到了
arguments對象
中,
arguments對象
位于
函數體内
,與數組有點類似(但它并不是Array的執行個體),
參數都被儲存到了這個數組中
。
有的人可能會問了,既然所有傳遞進來的參數都被儲存到arguments數組中了,那麼在聲明函數的時候還聲明參數幹什麼?
其實聲明形參隻是為了友善在函數體中引用傳遞進來的實參,但這不是必需的,在聲明函數時也可以不聲明形參。
函數聲明提升
console.log(abc)
var abc=[1,2,3]
///會列印出undefined
函數的作用域
變量的作用域範圍可分為
全局變量
和
局部變量
全局變量:
在最外層聲明的變量
叫全局變量
在函數體内部
,沒有使用
var
關鍵字聲明的變量也是
全局變量
局部變量:
在函數體内部,使用
var
關鍵字聲明的變量叫作
局部變量
。
自執行函數
先前咱們寫的函數隻有在調動的時候才會執行,如果像下面這樣寫的話,代碼執行到這一行的時候,函數會自己執行(或者說自己調用自己)。
(function sum(a){
console.log(a);
})("abc")