国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中arguments和this對象用法分析

2024-05-06 15:32:02
字體:
來源:轉載
供稿:網友

本文實例講述了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對象。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 城市| 定西市| 明星| 汉阴县| 黄山市| 修武县| 漯河市| 台北市| 体育| 旅游| 安徽省| 新津县| 饶河县| 宜川县| 郯城县| 措勤县| 迁西县| 荆州市| 洪雅县| 迁西县| 忻州市| 乡宁县| 南乐县| 金坛市| 吉林省| 元氏县| 西贡区| 金阳县| 菏泽市| 乌拉特前旗| 文安县| 高雄市| 介休市| 慈利县| 鄂伦春自治旗| 牟定县| 于田县| 景东| 竹溪县| 敦煌市| 新田县|