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>
執行程式嘗試
提示:如果y已經定義,y || 回傳 y, 因為y 是true, 否則回傳0, 因為undefined 為false。
如果函數呼叫時設定了過多的參數,參數將無法被引用,因為無法找到對應的參數名稱。 只能使用 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中,可以引用對象的值。
因此我們在函數內部修改物件的屬性就會修改其初始的值。
修改物件屬性可作用於函數外部(全域變數)。
修改物件屬性在函數外是可見的。