一、在函数调用的时候,浏览器每次都会传递进来两个隐式参数
1.函数的上下文对象this
2.封装实参的对象arguments

二、arguments对象

1.arguments对象实际是所在函数的一个内置数组对象。
2.每个函数都有一个arguments属性,表示函数的实参集合实参集合,这里的实参是重点,就是执行参数时实际传入的参数的集合;arguments不是数组而是一个对象,但他和数组很相似,所以通常称为类数组对象。arguments对象不能显示创建,它只有在函数开始时才可以用。
3.arguments还有callee,length和迭代器Symbol等属性。
4.argumetns同样具有length属性,arguments.length为函数实参的个数,可以用agruments[length]显示调用参数。
5.arguments对象可以检测参数个数,模拟函数重载。

三、理解点

1.arguments对象可以在函数内部访问所有的参数,实参

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

2.在正常的模式下,arguments对象可以在运行的时候进行修改

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

3.在严格模式下,arguments对象在运行的时候不可以修改修改arguments对象不会影响到实际的函数参数

function add(a, b) {'use strict'; // 开启严格模式arguments[0] = 10;arguments[1] = 20;console.log(a,b);return a+b;}console.log(add(3,6)) // 9

4.通过arguments对象的length属性,可以判断实参的个数

function add(a, b) {console.log(arguments.length);}add(3,6) // 2

5.arguments是一个对象,不是数组,转换为数组可以采用slice和逐一填入新数组

function demo(a, b) {console.log(arguments instanceof Array); // falsevar arr = Array.prototype.slice.call(arguments);console.log(arr instanceof Array); //truevar arr2 =  [];for(var i = 0; i<arguments.length;i++){arr2.push(arguments[i]);}console.log( arr2 instanceof Array); // true}demo(1,2,3);

6.arguments的callee属性可以返回对应的原函数,达到调用自身函数的效果,但在严格模式中是不适用的

function fn() {console.log(arguments.callee === fn) // true}fn(); //返回原函数,调用自身

四、arguments的应用
1.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);

2.借用arguments.callee实现递归操作

//通过arguments.callee实现1-100的和
let num = 0;function fn(n) {num += n;if (n === 0){return;}arguments.callee(n-1);}fn(100);console.log(num);

js中arguments的理解相关推荐

  1. JS中setter/getter理解

    JS中setter/getter理解 JS对象属性 get/set和getter/setter 数据属性 Object.defineProperty() 访问器属性 getter/setter创建及删 ...

  2. 探究js中arguments

     类数组对象:arguments 总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做argume ...

  3. js中arguments的用法

    了解这个对象之前先来认识一下javascript的一些功能: 其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载.Javascrip中国每个函数都会有一个Argume ...

  4. js中arguments的使用

    参考: https://www.cnblogs.com/LMJBlogs/p/6024148.html /**** arguments :* 1. 此对象能够模拟重载(参数个数不同)* 2. 每个函数 ...

  5. Javascript基础进阶(十六)JS中面向对象的理解、继承、封装、多态

    小编推荐:Fundebug提供JS错误监控.微信小程序错误监控.微信小游戏错误监控,Node.j错误监控和Java错误监控.真的是一个很好用的错误监控费服务,众多大佬公司都在使用. 面向对象编程OOP ...

  6. js中arguments理解

    什么是arguments? 它是JS的一个内置对象 .函数内部的类数组对象.因为在js函数对象中传递的形参 可以传也可以不传,若方法里没有写参数却传入了参数,该如何拿到参数呢,答案就是argument ...

  7. js中call函数理解

    一直以来,对call函数都不是很理解,经常看到用,有时候把,觉得挺好理解的,有时候吧,又觉得摸不清头脑,最近在看d3,里面又遇到call,所以,还是得把这个问题理解透彻.现在把我的理解记录如下: ca ...

  8. 谈谈我对js中闭包的理解

    闭包是一个能够访问其他函数作用域的函数. 很显然这样的定义晦涩难懂,很多人都很难理解闭包的真正含义 那么我们就用通俗一点的语言来解析一下什么是闭包 我在知乎上看到一个比较有意思的回答: 由此我们可以通 ...

  9. js中this的理解

    平常用this很多,对this的理解就是this是对应执行环境,然而很多时候效果并不是想要的,最近看了一些谈到this的笔记和书籍,总结下. 对this的误解: this是指向函数本身 先上个demo ...

最新文章

  1. 搜狗手机输入法php,在线调用搜狗云输入法
  2. CF815D Karen and Cards
  3. 《数据驱动安全:数据安全分析、可视化和仪表盘》一1.2.4 统计学
  4. JavaOne正在重建动力
  5. Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用
  6. 使用OpenCV3处理图像
  7. redis 登录_Redis集群架构+Dubbo开发框架+SSO单点登录+Nginx+ZooKeeper
  8. Java:节点流和处理流的理解
  9. python3.4安装vc_Python3.4 用 pip 安装lxml时出现 “Unable to find vcvarsall.bat ”?
  10. ensprip引入静态路由_IP路由基础理论知识详解(三)
  11. 表单元素与提示文字无法对齐的问题(input,checkbox文字对齐)
  12. 移动前端开发一定会遇上的事
  13. DSPE-PEG-Hydroxyl DSPE-PEG-OH 磷脂-聚乙二醇-羟基概述
  14. Vue 3为什么要用 Proxy API 替代 DefineProperty API?
  15. We will rock you (我们将震憾你)
  16. tensorflow2.0 numpy.ndarray 与tenor直接互转
  17. 《C++ 黑客编程揭秘与防范(第2版)》目录—导读
  18. leafy tree
  19. STM32单片机实现二维码显示
  20. 6_linux软件的安装

热门文章

  1. 医院信息系统护士工作站的运行管理
  2. python openpyxl 遍历 excel
  3. 需要将文档翻译英语的时候该怎么办呢
  4. 键盘中的上下按键在excel中无法控制选择单元格
  5. mysql add column_SQL Add Column
  6. smarty 模板 for循环 php,smarty模板中类似for循环功能的实现代码
  7. Java计算机毕业设计电影周边产品查找系统源码+系统+数据库+lw文档
  8. 2023健身俱乐部会员管理系统的 设计与实现(论文+开题报告+运行)
  9. idea-设置代码块颜色
  10. flask的logging日志