JavaScript 函數(shù)參數(shù)
JavaScript 函數(shù)對參數(shù)的值沒有進(jìn)行任何的檢查。
函數(shù)顯式參數(shù)(Parameters)與隱式參數(shù)(Arguments)
在先前的教程中,我們已經(jīng)學(xué)習(xí)了函數(shù)的顯式參數(shù):
// 要執(zhí)行的代碼……
}
函數(shù)顯式參數(shù)在函數(shù)定義時列出。
函數(shù)隱式參數(shù)在函數(shù)調(diào)用時傳遞給函數(shù)真正的值。
參數(shù)規(guī)則
JavaScript 函數(shù)定義時顯示參數(shù)沒有指定數(shù)據(jù)類型。
JavaScript 函數(shù)對隱式參數(shù)沒有進(jìn)行類型檢測。
JavaScript 函數(shù)對隱式參數(shù)的個數(shù)沒有進(jìn)行檢測。
默認(rèn)參數(shù)
如果函數(shù)在調(diào)用時未提供隱式參數(shù),參數(shù)會默認(rèn)設(shè)置為:undefined
有時這是可以接受的,但是建議最好為參數(shù)設(shè)置一個默認(rèn)值:
實例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> </head> <body> <p>設(shè)置參數(shù)的默認(rèn)值。</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中文網(wǎng)(php.cn)</title> </head> <body> <p>設(shè)置函數(shù)參數(shù)默認(rèn)值。</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已經(jīng)定義 , y || 返回 y, 因為 y 是 true, 否則返回 0, 因為 undefined 為 false。 |
---|
如果函數(shù)調(diào)用時設(shè)置了過多的參數(shù),參數(shù)將無法被引用,因為無法找到對應(yīng)的參數(shù)名。 只能使用 arguments 對象來調(diào)用。
Arguments 對象
JavaScript 函數(shù)有個內(nèi)置的對象 arguments 對象。
argument 對象包含了函數(shù)調(diào)用的參數(shù)數(shù)組。
通過這種方式你可以很方便的找到最后一個參數(shù)的值:
實例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> </head> <body> <p>查找最大的數(shù)。</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>
運行實例 ?
點擊 "運行實例" 按鈕查看在線實例
或者創(chuàng)建一個函數(shù)用來統(tǒng)計所有數(shù)值的和:
實例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> </head> <body> <p>計算所有參數(shù)之和:</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>
運行實例 ?
點擊 "運行實例" 按鈕查看在線實例
通過值傳遞參數(shù)
在函數(shù)中調(diào)用的參數(shù)是函數(shù)的隱式參數(shù)。
JavaScript 隱式參數(shù)通過值來傳遞:函數(shù)僅僅只是獲取值。
如果函數(shù)修改參數(shù)的值,不會修改顯式參數(shù)的初始值(在函數(shù)外定義)。
隱式參數(shù)的改變在函數(shù)外是不可見的。
通過對象傳遞參數(shù)
在JavaScript中,可以引用對象的值。
因此我們在函數(shù)內(nèi)部修改對象的屬性就會修改其初始的值。
修改對象屬性可作用于函數(shù)外部(全局變量)。
修改對象屬性在函數(shù)外是可見的。