js中arguments对象的深入理解


Posted in Javascript onMay 14, 2019

前言

在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);

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Add Formatted Data to a Spreadsheet
Jun 12 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
Dec 20 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
Oct 15 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
Oct 23 Javascript
angularjs中的e2e测试实例
Dec 06 Javascript
jquery插件validation实现验证身份证号等
Jun 04 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
微信小程序 POST请求的实例详解
Sep 29 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
jQuery实现动态添加和删除input框代码实例
Mar 29 jQuery
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
May 07 Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 Javascript
ios中视频的最后一桢问题解决
May 14 #Javascript
详解可以用在VS Code中的正则表达式小技巧
May 14 #Javascript
vue项目中引入vue-datepicker插件的详解
May 14 #Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 #jQuery
JavaScript中this的全面解析及常见实例
May 14 #Javascript
jquery 验证用户名是否重复代码实例
May 14 #jQuery
记录vue项目中遇到的一点小问题
May 14 #Javascript
You might like
用PHP实现维护文件代码
2007/06/14 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
PHP中使用curl入门教程
2015/07/02 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
javascript时间差插件分享
2016/07/18 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
Python中replace方法实例分析
2014/08/20 Python
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
Python 类的继承实例详解
2017/03/25 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Django choices下拉列表绑定实例
2020/03/13 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
荷兰家电销售网站:Welhof
2020/12/08 全球购物
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
财务检查整改报告
2014/11/06 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
JavaScript实现栈结构详细过程
2021/12/06 Javascript