arguments 是一个对应于传递给函数的参数的类数组对象, 它只定义在函数体内.

在使用的时候要注意以下几点:

  1. arguments 对象是所有 (非箭头) 函数中都可用的局部变量.

::: tip 注意:
对于箭头函数,并不是没有 arguments ,而是没有 自己arguments
:::

举个例子:

function foo () {setTimeout(() => {console.log(arguments)}, 1000);
}
foo(1, 2, 3)// 输出 [Arguments] { '0': 1, '1': 2, '2': 3 }
  1. arguments 对象不是一个 Array ,它类似于 Array 它拥有索引元素和 length 属性,可以被转换成一个真正的 Array
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);
const args = Array.from(arguments);
const args = [...arguments];

arguments 在函数中主要有两个用途:

  • 用来判断有多少个参数传入函数, 还可以用来指代未命名的参数
  • 除了数组元素和 length 属性, 还可以通过 callee 属性解除函数体内的代码与函数名的耦合状态

arguments.callee

指向参数所属的当前执行的函数

举个例子:

function factorial (num) {if (num <= 1) {return 1;} else {return num * factorial(num-1)}
}

上述代码定义了一个阶乘函数,使用到了递归算法,但是函数名 factorial 与 函数执行紧紧耦合在一起,为了消除这种现象可以使用 arguments.callee

function factorial (num) {if (num <= 1) {return 1;} else {return num * arguments.callee(num-1);}
}

这样一来,不管函数调用叫什么名字,都可以完成递归调用.

但是现在已经不推荐使用 arguments.callee

原因:访问 arguments 是个很昂贵的操作,因为它是个很大的对象,每次递归调用时都需要重新创建。影响现代浏览器的性能,还会影响闭包。

所以需要再次改造 (利用立即执行函数来实现):

function factorial (num) {if (num <= 1) {return 1}let flag = 1;return (function fn () {flag *= num;num--;if (num != 0) fn()return flag})()
}

arguments.length

传递给函数的参数数量

该属性表示的是实际传入的参数个数而不是声明的参数个数

::: tip 注意
实参长度: arguments.length
形参长度: arguments.callee.length
:::

借此可以用来检查传入参数个数的正确性:

function check(args) {var actual = args.length; // 实际的参数个数var expected = args.callee.length; // 期待的参数个数if( actual != expected ) {throw new Error("参数个数有误,期望值:" + expected + ";实际值:" + actual);}
}
function fn(x,y,z) {check(arguments); // 检查参数个数的正确性return x+y+z;
}

详解函数中的 arguments相关推荐

  1. 详解 js 函数中的 arguments

    详解 js 函数中的 arguments 1.什么 arguments 简单来说:arguments 是一个对应于传递给函数的参数的类数组对象 arguments 对象是所有(非箭头)函数中都可用的局 ...

  2. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  3. python join_详解Python中的join()函数的用法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...

  4. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  5. mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数

    <Mysql实例详解Mysql中的JSON系列操作函数>要点: 本文介绍了Mysql实例详解Mysql中的JSON系列操作函数,希望对您有用.如果有疑问,可以联系我们. MYSQL必读前言 ...

  6. python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...

  7. python3中input输入浅谈_详解Python3中的 input() 函数

    详解Python3中的 input() 函数 一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: ...

  8. python函数的使用场景_详解python中strip函数的使用场景

    python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.l ...

  9. python中squeeze函数_详解pytorch中squeeze()和unsqueeze()函数介绍

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

最新文章

  1. 查看linux是几位的操作系统
  2. JZOJ 5922. 【NOIP2018模拟10.23】sequence
  3. Mac 下安装并配置 Tomcat
  4. ubuntu16.04 配置nginx支持redis
  5. C++11 并发指南------std::thread 详解
  6. 打印屏蔽部分内容window.print()
  7. 《MicoPython入门指南》一书即将出版
  8. 用JSON-server模拟REST API
  9. HC-SR04 超声波原理图讲解与时序分析与arduino使用
  10. valine自定义表情正确打开方式
  11. win32如何处理组合键盘消息
  12. http2协议翻译(转)
  13. IC卡是什么意思?ID卡区别是?
  14. 以太坊用户体验的痛点
  15. Java+JSP+MySQL基于SSM的医院挂号就诊系统
  16. c 程序设计语言 好难,C程序设计语言难点及分析
  17. 分享三套美团面试经历+简单答案
  18. 关键词的选择在应用商城的重要性
  19. 【电气专业知识问答】问:蓄电池为何必须经常处于浮充电状态?浮充电应注意什么?
  20. Java8使用LocalDateTime获取正确的第几周和计算日期最佳方式

热门文章

  1. Docker for Windows
  2. Ubuntu自制liveCD学习
  3. Java学习路线-夯实基础
  4. 打好“三场仗”,数据库新晋厂商石原子胜券在握
  5. Python+Django+Channels之Consumers(用户)
  6. 计算机网络应用大专,计算机网络应用专业
  7. 从零开始学习3D可视化之摄像机
  8. 奥塔在线:C#创建Winform项目时没有App.config文件的原因
  9. 学习游戏软件开发需要哪些基础知识
  10. ASP 、PHP 代码加密的安全性逻辑思考