JavaScript 函數參數



JavaScript 函數對參數的值沒有進行任何的檢查。


函數明確參數(Parameters)與隱式參數(Arguments)

在先前的教學中,我們已經學習了函數的明確參數:

functionName(parameter1, parameter2, parameter3) {
    // 要執行的程式碼…
}

函數明確參數在函數定義時列出。

函數隱含參數在函數呼叫時傳遞給函數真正的值。


參數規則

JavaScript 函數定義時顯示​​參數沒有指定資料型別。

JavaScript 函數對隱式參數沒有進行型別偵測。

JavaScript 函數對隱式參數的數量沒有進行偵測。


預設參數

如果函數在呼叫時未提供隱式參數,參數會預設為:undefined

##有時這是可以接受的,但是建議最好為參數設定一個預設值:

#實例

#
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<p>设置参数的默认值。</p>
<p id="demo"></p>
<script>
function myFunction(x, y) {
    if (y === undefined) {
        y = 0;
    }    
    return x * y;
}
document.getElementById("demo").innerHTML = myFunction(4);
</script>

</body>
</html>

執行實例»點擊"運行實例" 按鈕查看線上實例

或者,更簡單的方式:

實例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<p>设置函数参数默认值。</p>
<p id="demo"></p>
<script>
function myFunction(x, y) {
    y = y || 0;
    return x * y;
}
document.getElementById("demo").innerHTML = myFunction(4);
</script>

</body>
</html>
# #運行實例»
點擊"運行實例" 按鈕查看線上實例

如果函數呼叫時設定了過多的參數,參數將無法被引用,因為無法找到對應的參數名稱。 只能使用 arguments 物件來呼叫。


Arguments 物件

JavaScript 函數有內建的物件 arguments 對象。

argument 物件包含了函數呼叫的參數陣列。

透過這種方式你可以很方便的找到最後一個參數的值:

實例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<p>查找最大的数。</p>
<p id="demo"></p>
<script>
function findMax() {
    var i, max = 0;
    for(i = 0; i < arguments.length; i++) {
		if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
} 
document.getElementById("demo").innerHTML = findMax(4, 5, 6);
</script>

</body>
</html>

執行實例»

點擊"運行實例" 按鈕查看線上實例

或建立一個函數用來統計所有數值的和:

##實例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<p>计算所有参数之和:</p>
<p id="demo"></p>
<script>
function sumAll() {
    var i, sum = 0;
    for(i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
} 
document.getElementById("demo").innerHTML =
	sumAll(1, 123, 500, 115, 44, 88);
</script>

</body>
</html>

運行實例»點擊"運行實例"按鈕查看線上實例


透過值傳遞參數

在函數中呼叫的參數是函數的隱式參數。

JavaScript 隱含參數透過值來傳遞:函數只是只取得值。

如果函數修改參數的值,不會修改明確參數的初始值(在函數外定義)。

隱式參數的改變在函數外是不可見的。


透過物件傳遞參數

在JavaScript中,可以引用物件的值。

因此我們在函數內部修改物件的屬性就會修改其初始的值。

修改物件屬性可作用於函數外部(全域變數)。

修改物件屬性在函數外是可見的。


Note如果y已經定義, y || 回傳y, 因為y 是true, 否則回傳0, 因為undefined 為false。