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 相关文章推荐
JS解密入门 最终变量劫持
Jun 25 Javascript
jquery.jstree 增加节点的双击事件代码
Jul 27 Javascript
基于jquery的实现简单的表格中增加或删除下一行
Aug 01 Javascript
js中有关IE版本检测
Jan 04 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
Nov 07 Javascript
JavaScript如何动态创建table表格
Aug 02 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
Sep 22 Javascript
基于vue实现web端超大数据量表格的卡顿解决
Apr 02 Javascript
详解基于 Node.js 的轻量级云函数功能实现
Jul 08 Javascript
三剑客:offset、client和scroll还傻傻分不清?
Dec 04 Javascript
vue watch监控对象的简单方法示例
Jan 07 Vue.js
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
图书管理程序(二)
2006/10/09 PHP
php 删除数组元素
2009/01/16 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
php关联数组快速排序的方法
2015/04/17 PHP
php验证码实现代码(3种)
2015/09/07 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
js去除浏览器默认底图的方法
2015/06/08 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python导出hive数据表的schema实例代码
2018/01/22 Python
Python实现快速计算词频功能示例
2018/06/25 Python
python生成lmdb格式的文件实例
2018/11/08 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Python中求对数方法总结
2020/03/10 Python
python实现梯度下降法
2020/03/24 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
竞选班长演讲稿
2013/12/30 职场文书
英文求职信写作小建议
2014/02/16 职场文书
春节联欢会主持词
2014/03/24 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
2014年设计师工作总结
2014/11/25 职场文书
文员岗位职责
2015/02/04 职场文书
英语教师个人工作总结
2015/02/09 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书