關於函數的arguments
函數的參數
-> length 屬性
在 js 中凡是定義了一個函數, 就是定義了一個對象.
函數與一般的數據是一樣的使用: 賦值, 可以調用.
函數作為對象有一個屬性 length 該屬性用於描述在定義的時候函數的 參數個數
-> arguments 對象
所謂 arguments, 就是參數的復數形式. 也就是在調用函數的時候, 會給函數傳入參數
但是有時不確定需要傳入多少參數, 所有在調用時傳入的參數都會被 arguments 獲取到.
簡單的說 arguments 中存儲的就是參數的集合.
在實際調用的時候 arguments 就是實際調用時傳入的所有參數
問題: 如何判斷函數參數調用符合函數的定義?
如何判斷調用時的參數個數與函數定義時的參數個數一樣?
函數名.length === arguments.length
使用 arguments 可以保證在函數定義不寫參數的情況下, 也可以獲得函數調用時傳入的所有參數.
因此在不確定函數有多少參數和需要函數有動態參數的時候使用.
1> 比如, 求兩個數組中較大的數字
function max( a, b ) {
return a > b ? a : b;
}
如果需要判斷多個數字中較大的數字,代碼如下:
function max(){ var args = arguments; var maxNum = args[0]; for(var i=1;i<args.length;i++){ if(maxNum<args[i]){ maxNum = args[i]; } } return maxNum; } console.log(max(2,3,4,5,6,9))
2> 希望函數有動態參數, 在傳入不同參數的時候有不同的結果
在 jq 中, css, attr, val, html, text, ...
接下來實現一個 css 方法, 該方法提供兩個參數, 一個是 dom 元素, 第二個是一個字符串
用於解釋獲得什麽樣式屬性值; 也可以帶有三個參數, 第一個參數是 dom 元素, 第二個參數
是字符串, 用於告知需要處理哪一個樣式, 第三個參數就是對應的樣式值.
css( div, ‘border‘ ) -> 獲得 div 元素的 border 樣式屬性的值
css( div, ‘border‘, ‘1px solid red‘ ) 為元素 div 設置 border 的樣式.
代碼如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="dv"></div> </body> <script> function css () { var args = arguments; // 第 0 個元素是 DOM // 第 1 個元素是 對應的樣式 // 第 2 個元素是 需要設置的樣式值 if ( args.length == 3 ) { // 設置 args[ 0 ].style[ args[ 1 ] ] = args[ 2 ]; } else { // 獲取 return args[ 0 ].style[ args[ 1 ] ]; } } var div = document.getElementById( ‘dv‘ ); css( div, ‘border‘, ‘1px solid red‘ ); css( div, ‘width‘, ‘200px‘); css( div, ‘height‘, ‘100px‘); console.log( css( div, ‘width‘ ) ); </script> </html>
關於函數的arguments