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

首頁 > 編程 > JavaScript > 正文

js中arguments對象的深入理解

2019-11-19 11:34:48
字體:
來源:轉載
供稿:網友

前言

在JavaScript中,arguments屬于當前對象的一個內置屬性,arguments非常類似于Array對象,但是又不是實例的Array。本文主要給大家介紹了關于js中arguments對象的相關內容,下面話不多說了,來一起看看詳細的介紹吧

一、在函數調用的時候,瀏覽器每次都會傳遞進兩個隱式參數

  • 函數的上下文對象this
  • 封裝實參的對象arguments

二、arguments 對象

  • arguments 對象實際上是所在函數的一個內置類數組對象
  • 每個函數都有一個arguments屬性,表示函數的實參集合,這里的實參是重點,就是執行函數時實際傳入的參數的集合。arguments不是數組而是一個對象,但它和數組很相似,所以通常稱為類數組對象,以后看到類數組其實就表示arguments。arguments對象不能顯式的創建,它只有在函數開始時才可用。
  • arguments還有屬性callee,length和迭代器Symbol。
  • arguments同樣具有length屬性,arguments.length 為函數實參個數,可以用arguments[length]顯示調用參數
  • arguments對象可以檢測參數個數,模擬函數重載

三、理解點

第一點:arguments對象:可以在函數內訪問所有的參數,實參

    實例代碼:

function f1(){  console.log(arguments[0]);  console.log(arguments[1]);  console.log(arguments[2]); } f1(12,23,45); //12 34 45

第二點:在正常的模式下,arguments對象可以在運行的時候進行修改

    實例代碼:

function f2(a,b){  arguments[0] = 10;  arguments[1] = 20;  return a + b; } console.log(f2(4,6)); //30

第三點:在嚴格的模式下,arguments對象在運行的時候不可以修改,修改arguments對象不會影響到實際的函數參數

    注意:  'use strict' 是開啟嚴格模式

    實例代碼:

function f3(a,b){  'use strict';  arguments[0] = 10;  arguments[1] = 20;  return a + b; } console.log(f3(3,6)); //9

第四點:通過arguments對象的length屬性,可以判斷實參的個數

    實例代碼:

 function f4(){  console.log(arguments.length); } f4(2,3,4,5); //4 f4(1);  //1 f4();  //0

第五點:arguments是一個對象,不是數組,轉換為數組可以采用 slice 和 逐一填入新數組

    實例代碼:

var arr = Array.prototype.slice.call(arguments);  console.log(typeof arr);  var arr2 = [];  for(var i = 0; i<arguments.length;i++){   arr2.push(arguments[i]);  }  console.log(typeof arr2);

第六點:arguments的callee屬性可以返回對應的原函數,達到調用自身函數的效果,但是在嚴格模式中是不適用的

    實例代碼:

var f5 = function(){   console.log(arguments.callee===f5); //true   console.log(arguments.callee===f6); //false  }    var f6;  f5(); //返回原函數,調用自身

四、arguments的應用

第一點:arguments.callee為引用函數自身。我們可以借用arguments.length可以來查看實參和形參的個數是否一致

    實例代碼:

function add(a, b) {  var realLen = arguments.length;  console.log("realLen:", arguments.length);  var len = add.length;  console.log("len:", add.length);  if (realLen == len) {  console.log('實參和形參個數一致');  } else {  console.log('實參和形參個數不一致');  } }; add(11,22,33,44,66);

第二點:我們可以借用arguments.callee來讓匿名函數實現遞歸

    實例代碼:

var sum = function(n) {  if(n == 1) {   return 1;  } else {   return n + arguments.callee(n-1);   }  } console.log("sum =", sum(5)); 

第三點:編寫一個函數求傳入的若干個數字(不能用數組顯示傳入)的和

    實例代碼:

function add() { var len = arguments.length; var sum = 0; for (var i = 0; i < len; ++i) {   sum += arguments[i]; } return sum; }; add(11,22,33,44,66);

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太白县| 水城县| 云阳县| 那曲县| 铜陵市| 陇西县| 洪雅县| 宁强县| 库尔勒市| 永城市| 平罗县| 称多县| 潢川县| 保定市| 南宫市| 西乌珠穆沁旗| 青川县| 如皋市| 丹棱县| 秦安县| 调兵山市| 五家渠市| 芜湖市| 永丰县| 芦山县| 湟中县| 铅山县| 荔浦县| 仁寿县| 盱眙县| 绥化市| 桦甸市| 浮山县| 新营市| 梁河县| 东丽区| 阜南县| 怀化市| 莎车县| 邢台县| 庆阳市|