本文實例講述了JavaScript中arguments和this對象用法。分享給大家供大家參考,具體如下:
在函數內部有兩個特殊的對象 : arguments和this。
1、arguments對象
js函數不介意定義多少參數,也不在乎傳遞進來多少參數,也就是說,即使定義的函數只接收2個參數,在調用時候也未必傳遞2個參數,因為js的函數參數在內部使用一個數組表示的,在函數體內可以通過arguments對象訪問此參數數組。因此,js函數可以不顯式地使用命名參數。
當函數被調用時,傳入的參數將保存在arguments類數組對象中,通過arguments可以訪問所有該函數被調用時傳遞給它的參數列表。
arguments是一個類數組對象,因為arguments可以通過方括號語法訪問每一個元素,且擁有一個length屬性,但它缺少所有的數組方法,因此并不是一個真正的數組。
使用arguments可以實現一個求和函數:
function add() { var sum = 0; for (var i = 0, len = arguments.length; i < len; i++) sum += arguments[i]; return sum;}雖然arguments的主要用途是保存函數參數,但這個對象還有一個callee屬性,該屬性是一個指針,指向擁有這個arguments對象的函數。
使用arguments.callee屬性可以實現一個階乘函數:
function factorial(num) { if (num <= 1) return 1; else return num * arguments.callee(num - 1);}注意:
在嚴格模式下,不能使用arguments.callee屬性,也不能對arguments對象賦值,更不能用arguments對象跟蹤參數的變化。
可以使用命名函數表達式來達成同樣的效果:
var factorial = (function func(num) { if (num <= 1) return 1; else return num * func(num - 1);));由于js函數沒有簽名(定義接受的參數的類型和數量),js函數沒有重載,對于同名函數,后定義的函數會覆蓋先定義的函數。當然,通過檢查傳入的參數的類型和數量并做出不同的反應,可以模仿方法的重載。
2、this對象
與別的語言不同,JavaScript的this總是指向一個對象,而具體指向哪個對象是在運行時基于函數的執行環境動態綁定的,而非函數被聲明時的環境。
this是執行上下文的一個屬性,其值在進入上下文時確定,且在上下文運行期間永久不變。 this 是動態綁定的,即在運行期綁定。 this可以是全局對象,當前對象或任意對象,取決于函數的調用方式。函數的調用方式有以下幾種:作為普通函數調用,作為對象方法調用,作為構造函數調用,使用call()和apply()調用。(1)作為普通函數調用
當函數不作為對象的屬性被調用,即直接被調用時,this會被綁定到全局對象。在瀏覽器的JavaScript里,該全局對象是window對象。
新聞熱點
疑難解答
圖片精選