javascript
058_JavaScript函数arguments对象
1. 參數(shù)規(guī)則
1.1. JavaScript函數(shù)定義不會為參數(shù)(parameter)規(guī)定數(shù)據類型。
1.2. JavaScript函數(shù)不會對所傳遞的參數(shù)(argument)實行類型檢查。
1.3. JavaScript函數(shù)不會檢查所接收參數(shù)(argument)的數(shù)量。
2. 參數(shù)默認
2.1. 如果調用參數(shù)時省略了參數(shù)(少于被聲明的數(shù)量), 則丟失的值被設置為: undefined。
2.2. 如果函數(shù)調用的參數(shù)太多(超過聲明), 則可以使用arguments對象來達到這些參數(shù)。
3. 函數(shù)參數(shù)值傳遞
3.1. 如果函數(shù)參數(shù)非引用類型, 那么函數(shù)改變了參數(shù)的值, 它不會改變參數(shù)的原始值。
3.2. 參數(shù)的改變在函數(shù)之外是不可見的。
var a = 100;function myFunction(a) {a -= 99; }myFunction(a); document.write('a = ' + a + '<br />'); // 輸出a = 1004. 函數(shù)參數(shù)引用傳遞
4.1. 如果函數(shù)參數(shù)是引用類型, 例如是對象, 如果函數(shù)改變了對象屬性, 它也改變了原始值。
4.2. 對象屬性的改變在函數(shù)之外是可見的。
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>函數(shù)參數(shù)值、引用傳遞</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. 在函數(shù)代碼中, 使用特殊對象arguments, 開發(fā)者無需明確指出參數(shù)名, 就能訪問它們。
5.2. 我們可以使用arguments[0]的形式訪問函數(shù)參數(shù), 即第一個參數(shù)的值(第一個參數(shù)位于位置0, 第二個參數(shù)位于位置1, 依此類推):
// arguments[0]訪問第一個參數(shù) document.write('第一個參數(shù): ' + arguments[0] + '<br />'); // arguments[1]訪問第二個參數(shù) document.write('第二個參數(shù): ' + arguments[1] + '<br />');5.3. 實例
5.3.1. 代碼
<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="utf-8" /><title>arguments訪問參數(shù)值</title></head><body><script type="text/javascript">function myFunction(a, b) {// arguments[0]訪問第一個參數(shù)document.write('第一個參數(shù): ' + arguments[0] + '<br />'); // arguments[1]訪問第二個參數(shù)document.write('第二個參數(shù): ' + arguments[1] + '<br />'); return a * b; }myFunction(8, 9); </script></body> </html>5.3.2. 效果圖
6. 檢測參數(shù)個數(shù)
6.1. JavaScript不會驗證傳遞給函數(shù)的參數(shù)個數(shù)是否等于函數(shù)定義的參數(shù)個數(shù)。開發(fā)者定義的函數(shù)都可以接受任意個數(shù)的參數(shù)(根據Netscape的文檔, 最多可接受255個), 而不會引發(fā)任何錯誤。任何遺漏的參數(shù)都會以 undefined傳遞給函數(shù), 多余的參數(shù)將忽略。
6.2. arguments對象的length屬性返回函數(shù)調用實際參數(shù)的個數(shù)。
function howManyArgs() {// arguments.length返回函數(shù)調用實際參數(shù)的個數(shù)document.write('該函數(shù)有' + arguments.length + '個參數(shù)<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返回函數(shù)調用實際參數(shù)的個數(shù)document.write('該函數(shù)有' + arguments.length + '個參數(shù)<br />'); }howManyArgs(); howManyArgs(8);howManyArgs(8, 'abc');</script></body> </html>6.3.2. 效果圖
7. 模擬函數(shù)重載
7.1. 可以使用arguments對象判斷傳遞給函數(shù)的參數(shù)個數(shù), 即可模擬函數(shù)重載:
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模擬函數(shù)重載</title></head><body><script type="text/javascript">// 做加法運算的函數(shù)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作用域