javascript
058_JavaScript函数arguments对象
1. 參數規則
1.1. JavaScript函數定義不會為參數(parameter)規定數據類型。
1.2. JavaScript函數不會對所傳遞的參數(argument)實行類型檢查。
1.3. JavaScript函數不會檢查所接收參數(argument)的數量。
2. 參數默認
2.1. 如果調用參數時省略了參數(少于被聲明的數量), 則丟失的值被設置為: undefined。
2.2. 如果函數調用的參數太多(超過聲明), 則可以使用arguments對象來達到這些參數。
3. 函數參數值傳遞
3.1. 如果函數參數非引用類型, 那么函數改變了參數的值, 它不會改變參數的原始值。
3.2. 參數的改變在函數之外是不可見的。
var a = 100;function myFunction(a) {a -= 99; }myFunction(a); document.write('a = ' + a + '<br />'); // 輸出a = 1004. 函數參數引用傳遞
4.1. 如果函數參數是引用類型, 例如是對象, 如果函數改變了對象屬性, 它也改變了原始值。
4.2. 對象屬性的改變在函數之外是可見的。
var obj = {b: 'zhangsan'};function myFunction(obj) { obj.b = 'lisi'; }myFunction(obj); document.write('b = ' + obj.b + '<br />'); // 輸出b = 'lisi'4.3. 例子
4.3.1. 代碼
<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="utf-8" /><title>函數參數值、引用傳遞</title></head><body><script type="text/javascript">var a = 100;var obj = {b: 'zhangsan'};function myFunction(a, obj) {a -= 99; obj.b = 'lisi'; }myFunction(a, obj); document.write('a = ' + a + '<br />');document.write('b = ' + obj.b + '<br />');</script></body> </html>4.3.2. 效果圖
5. arguments對象
5.1. 在函數代碼中, 使用特殊對象arguments, 開發者無需明確指出參數名, 就能訪問它們。
5.2. 我們可以使用arguments[0]的形式訪問函數參數, 即第一個參數的值(第一個參數位于位置0, 第二個參數位于位置1, 依此類推):
// arguments[0]訪問第一個參數 document.write('第一個參數: ' + arguments[0] + '<br />'); // arguments[1]訪問第二個參數 document.write('第二個參數: ' + arguments[1] + '<br />');5.3. 實例
5.3.1. 代碼
<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="utf-8" /><title>arguments訪問參數值</title></head><body><script type="text/javascript">function myFunction(a, b) {// arguments[0]訪問第一個參數document.write('第一個參數: ' + arguments[0] + '<br />'); // arguments[1]訪問第二個參數document.write('第二個參數: ' + arguments[1] + '<br />'); return a * b; }myFunction(8, 9); </script></body> </html>5.3.2. 效果圖
6. 檢測參數個數
6.1. JavaScript不會驗證傳遞給函數的參數個數是否等于函數定義的參數個數。開發者定義的函數都可以接受任意個數的參數(根據Netscape的文檔, 最多可接受255個), 而不會引發任何錯誤。任何遺漏的參數都會以 undefined傳遞給函數, 多余的參數將忽略。
6.2. arguments對象的length屬性返回函數調用實際參數的個數。
function howManyArgs() {// arguments.length返回函數調用實際參數的個數document.write('該函數有' + arguments.length + '個參數<br />'); }howManyArgs(); howManyArgs(8); howManyArgs(8, 'abc');6.3. 實例
6.3.1. 代碼
<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="utf-8" /><title>arguments length屬性</title></head><body><script type="text/javascript">function howManyArgs() {// arguments.length返回函數調用實際參數的個數document.write('該函數有' + arguments.length + '個參數<br />'); }howManyArgs(); howManyArgs(8);howManyArgs(8, 'abc');</script></body> </html>6.3.2. 效果圖
7. 模擬函數重載
7.1. 可以使用arguments對象判斷傳遞給函數的參數個數, 即可模擬函數重載:
function doAdd() {document.write('doAdd()<br />');var value = 0;for(var i = 0, l = arguments.length; i < l; i++){value += arguments[i];}document.write('value = ' + value + '<br />');return value; }doAdd(); doAdd(8); doAdd(8, 9); doAdd(8, 9, 10);7.2. 實例
7.2.1. 代碼
<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="utf-8" /><title>arguments模擬函數重載</title></head><body><script type="text/javascript">// 做加法運算的函數function doAdd() {document.write('doAdd()<br />');var value = 0;for(var i = 0, l = arguments.length; i < l; i++){value += arguments[i];}document.write('value = ' + value + '<br />');return value;}function doAdd(a, b) {document.write('doAdd(a, b) a = ' + a + ', b = ' + b + '<br />');var value = 0;for(var i = 0, l = arguments.length; i < l; i++){value += arguments[i];}document.write('value = ' + value + '<br />');return value;}// 就近原則, 調用doAdd(a, b)doAdd(); doAdd(8); doAdd(8, 9);doAdd(8, 9, 10);</script></body> </html>7.2.2. 效果圖
總結
以上是生活随笔為你收集整理的058_JavaScript函数arguments对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 083_JavaScript Cooki
- 下一篇: 060_JavaScript作用域