arguments是一个内置对象,伪数组,看似数组但是不能用数组的方法

function fun(){console.log(arguments);
}
fun('tom',[1,2,3],{name:'Janny'});

可以看到下面打印出来的结果,arguments是有值的,它的值就是我们传递进去的参数,虽然我们没有给fun函数定义形参,但是我们还是可以通过arguments来调用传递给函数fun的实参。

此外,我们可以看到arguments还有属性callee,length和迭代器Symbol。

1. 我们发现callee的值是函数fun,是不是说callee指向函数fun,我们来测试一下

function fun(){// console.log(arguments);console.log('arguments.callee === fun的值:',arguments.callee === fun);}fun('tom',[1,2,3],{name:'Janny'});

结果如我们想的一样,callee就是指向函数fun。

2. 第二个属性length,我们经常在数组或者类数组中看到,可以看到arguments的原型索引__proto__的值为Object,故此我们推测arguments不是数组,而是一个类数组对象。

 
function fun(){console.log(arguments instanceof Array);console.log(Array.isArray(arguments));}fun('tom',[1,2,3],{name:'Janny'});

结果打印出来的值都是false,说明arguments不是数组,而是一个类数组对象。

3. 第三个属性是个Symbol类型的键,该类型的值都是独一无二的,该键指向的值是一个values函数,

该值是一个生成迭代器的函数,下面是ES6入门的部分文档。

let arr = ['a', 'b', 'c'];let iter = arr[Symbol.iterator]();iter.next() // { value: 'a', done: false }iter.next() // { value: 'b', done: false }iter.next() // { value: 'c', done: false }iter.next() // { value: undefined, done: true }//在arguments中有同样的效用。function fun(){console.log(arguments[Symbol.iterator]);let iterator = arguments[Symbol.iterator]();console.log('iterator:',iterator);console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());}fun('tom',[1,2,3],{name:'Janny'});
下面是arguments的迭代器枚举的值:

arguments的理解?相关推荐

  1. js中arguments的理解

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

  2. js Array.prototype.slice.call(arguments,0) 理解

    Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(argu ...

  3. arguments的理解

    (function(){return typeof arguments;})(); 无聊的时候看看网上的面试题.个人认为通过面试题可以对某个知识点能够更加认识,踩过坑才会明白坑是有多大. 代码中经常用 ...

  4. arguments 的理解

    js函数有两个隐式参数 arguments 和 this,arguments是一个类数组结构,它保存了调用时传递给函数的所有实参:this是函数执行时的上下文对象 arguments关键字体现重载 / ...

  5. js的作用域链,原型链,以及闭包函数理解

    代码一: this.number = 10 function a() {this.number = 20 } a.prototype.init = () => console.log(this. ...

  6. [].shift.call( arguments ) 和 [].slice.call( arguments ) 解释

    经典的 [].slice.call( arguments ) 关于这个的解释网上有很多,大多是 "把类数组对象转为数组对象".确实这是我们想要实现的功能! 但这仅仅是说明了结果并没 ...

  7. js高级程序设计的笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> 1.js中的 null : 如果只意在保存对象的变量还没有真正的保存对象之前,就需要先把该变量保存 null值, null代表 ...

  8. JavaScript基本概念(下)

    1. 操作符 1.1 一元操作符 1.1.1 递增和递减操作符 var s1 = "2"; var s2 = "z"; var b = false; var f ...

  9. Web前端开发面试考点指南

    Web 前端面试指南与高频考题解析指南 第一章 面试准备:简历编写和面试前准备 一般来说,跳槽找工作要经历投递简历.准备面试.面试和谈 offer 四个阶段.其中面试题目会因你的等级和职位而异,从入门 ...

最新文章

  1. ubuntu 如何关闭离线模式_如何在macOS中打开或关闭Mac暗黑模式
  2. OpenGL实践系列之开篇: 坐标系
  3. 用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)
  4. [小技巧]在NTFS分区中复制文件的同时如何复制权限
  5. ITK:从给定的seeds创建距离图
  6. Linux 命令之 gunzip -- 用来解压缩文件
  7. 提升数据分析能力成熟度之四步曲_数据分析师
  8. Change Eclipse Tooltip's Color in Ubuntu
  9. 揭开面纱:Kubernetes架构详解
  10. 如何成为一个技术全面的架构师
  11. matlab中的ifftshift的用法,如何在R中写fftshift和ifftshift?
  12. 有了这套前端数据可视化框架,人人都能快速上手(赠100套前端可视化大屏模板)
  13. 北京地区研究生学位英语(GET)词汇
  14. Python-nan,NaN,NAN
  15. 微信开放平台开发-授权、全网发布(PHP)
  16. Unity3D 模型制作规范
  17. 任务6 -传统机器学习--SVM
  18. 运动学模型(二)----轮速计 后轮速差模型
  19. 中国液化天然气载体市场趋势报告、技术动态创新及市场预测
  20. 关于软件开发需求分析的分享~

热门文章

  1. bulk怎么使用oracle,oracle学习之bulk collect用法
  2. 判断一个数是否为Sky数
  3. MySQL(十二)MDL锁介绍
  4. 弹出窗口全攻略,代码,方法
  5. 视频教程-Oracle从入门到精通全套视频教程之SQL与PLSQL(四)-Oracle
  6. STM32Cube_FW_F4_V1.17 F4固件包百度网盘下载
  7. apache php 内存,不再为Apache进程淤积、耗尽内存而困扰
  8. APP测试的入门书籍有哪些?
  9. python底层是用什么语言实现的_我为何说Python是全栈式开发语言?
  10. 还原王欣:技术宅男的红与黑