js中arguments詳解

image.png

一、簡介

了解arguments這個(gè)對(duì)象之前先來認(rèn)識(shí)一下javascript的一些功能:
其實(shí)Javascript并沒有重載函數(shù)的功能,但是Arguments對(duì)象能夠模擬重載。Javascrip中每個(gè)函數(shù)都會(huì)有一個(gè)Arguments對(duì)象實(shí)例arguments,它引用著函數(shù)的實(shí)參,可以用數(shù)組下標(biāo)的方式"[]"引用arguments的元素。arguments.length為函數(shù)實(shí)參個(gè)數(shù),arguments.callee引用函數(shù)自身。

image.png

image.png

arguments.callee與形參是一一映射


image.png
image.png

二、特點(diǎn)

1.arguments對(duì)象和Function是分不開的。

2.因?yàn)閍rguments這個(gè)對(duì)象不能顯式創(chuàng)建。

3.arguments對(duì)象只有函數(shù)開始時(shí)才可用。

三、使用方法

雖然arguments對(duì)象并不是一個(gè)數(shù)組(類數(shù)組),但是訪問單個(gè)參數(shù)的方式與訪問數(shù)組元素的方式相同

例如:
arguments[0],arguments[1],。。。arguments[n]; 在js中 不需要明確指出參數(shù)名,就能訪問它們

例如:

function test() {
        var s = "";
        for (var i = 0; i < arguments.length; i++) {
            alert(arguments[i]);
            s += arguments[i] + ",";
        }
        return s;
}
test("name", "age");

輸出結(jié)果:
name,age

我們知道每一個(gè)對(duì)象都有自己的屬性,arguments對(duì)象也不例外,首先arguments的訪問猶如Array對(duì)象一樣,用0到arguments.length-1來枚舉每一個(gè)元素。下面我們來看看callee屬性,返回正被執(zhí)行的** Function** 對(duì)象,也就是所指定的 Function 對(duì)象的正文。callee 屬性是 arguments 對(duì)象的一個(gè)成員,僅當(dāng)相關(guān)函數(shù)正在執(zhí)行時(shí)才可用。callee 屬性的初始值就是正被執(zhí)行的** Function** 對(duì)象。實(shí)現(xiàn)匿名的遞歸函數(shù)。代碼如下:

var sum = function (n) {
        if (1 == n) {
            return 1;
        } else {
            return n + arguments.callee(n - 1); //6 5 4 3 2 1
        }
   }
   alert(sum(6));

輸出結(jié)果:21

通俗一點(diǎn)就是,arguments此對(duì)象大多用來針對(duì)同個(gè)方法多處調(diào)用并且傳遞參數(shù)個(gè)數(shù)不一樣時(shí)進(jìn)行使用。根據(jù)arguments的索引來判斷執(zhí)行的方法。

知識(shí)擴(kuò)展:

當(dāng)使用arguments進(jìn)行函數(shù)傳遞時(shí),有一些需要注意的點(diǎn)。例子如下:

var length = 10;
function fn() {
  console.log(this.length);
}

var obj = { 
  method: function(fn) {
    fn();
    arguments[0]();
  }
};

obj.method(fn, 1); 

輸出:10,2

這里有2個(gè)需要注意的點(diǎn)。fn函數(shù)里面的this的指向:

1.第一個(gè)值為10,執(zhí)行的是method里面的第一行"fn()",這里this指向的window。所以輸出的值為最外層定義的length。

2.第二個(gè)值為2,執(zhí)行的是method里面的第二行"arguments0"(arguments0 => fn() ),這里this執(zhí)行的是arguments這個(gè)對(duì)象,所以輸出值為arguments的長度

arguments 的用法和特性基本就是這么多了??赡躢allee屬性用到的比較少。但是如果自己封裝或者寫一些js的時(shí)候 除了callee的東西基本都會(huì)用到。有不對(duì)的地方希望朋友們多多支出。大家共同進(jìn)步。

傳多個(gè)參數(shù)事可以直接用argument,比如求最大值

 function max() {
        var max = arguments[0];
        console.log(arguments)

        for (val of arguments) {
            if (val >= max) {
                max = val;
            }
        }
        return max;
    }
    var maxValue = max('9', 1, 2, 4)
    console.log(maxValue)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 準(zhǔn)入訓(xùn)練 第1章 進(jìn)入忍者世界 js開發(fā)人員通常使用js庫來實(shí)現(xiàn)通用和可重用的功能。這些庫需要簡單易用,...
    如201608閱讀 1,407評(píng)論 1 2
  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句,而且...
    道無虛閱讀 4,926評(píng)論 0 5
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,665評(píng)論 0 4
  • 第一章 錯(cuò)誤處理: 錯(cuò)誤: 程序運(yùn)行過程中,導(dǎo)致程序無法正常執(zhí)行的現(xiàn)象(即bug) 現(xiàn)象: 程序一旦出錯(cuò),默認(rèn)會(huì)報(bào)...
    fastwe閱讀 1,249評(píng)論 0 1
  • 數(shù)值 判斷NaN更可靠的方法是,利用NaN為唯一不等于自身的值的這個(gè)特點(diǎn),進(jìn)行判斷。 isFinite方法返回一個(gè)...
    guyigg閱讀 1,262評(píng)論 0 2

友情鏈接更多精彩內(nèi)容