JS中的arguments参数

简介: JavaScript 开发中,函数方法一般都会通过指定具体的参数名来接收参数,但是,当参数不固定时,可通过arguments来操作函数接收到的参数。此外,并不是只有此方法可以接收任意参数,现代有很多处理方案,此处只提供一种。

我曾经写过关于函数调用时浏览器每次传递的隐式参数this,今天要讲的是另外一个浏览器传递给函数的隐式参数arguments。

在函数调用的时候,浏览器每次都会传递进两个隐式参数:

1. 函数的上下文对象this

2. 封装实参的对象arguments

下面是一个例子:

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

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

image.png

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

1. 我们发现callee的值是函数fun,是不是说callee指向函数fun,我们来测试一下
functionfun(){
// console.log(arguments);console.log('arguments.callee === fun的值:',arguments.callee===fun);
}
fun('tom',[1,2,3],{name:'Janny'});

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

image.png

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

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

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

image.png

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

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

letarr= ['a', 'b', 'c'];
letiter=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中有同样的效用。

functionfun(){
console.log(arguments[Symbol.iterator]);
letiterator=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的迭代器枚举的值:

image.png

如果本人哪里理解错误了,还望各位大神给小弟评论留言,小弟感激不尽,必将赶紧修改,以免误导他人。

目录
相关文章
|
2月前
|
前端开发
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
|
16天前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
34 7
|
2月前
|
JavaScript 前端开发
JavaScript基础知识-函数的参数
关于JavaScript函数参数基础知识的介绍。
27 4
JavaScript基础知识-函数的参数
|
2月前
|
JavaScript 前端开发
JavaScript 函数参数
JavaScript 函数参数
31 3
|
2月前
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
53 0
|
3月前
|
存储 JavaScript 对象存储
JS中的arguments是什么?
JS中的arguments是什么?
56 0
JS中的arguments是什么?
|
3月前
|
存储 JavaScript 索引
js arguments 的使用与自执行函数
js arguments 的使用与自执行函数
31 0
|
4月前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
57 1
|
4月前
|
存储 资源调度 前端开发
JavaScript 使用axios库发送 post请求给后端, 给定base64格式的字符串数据和一些其他参数, 使用表单方式提交, 并使用onUploadProgress显示进度
使用 Axios 发送包含 Base64 数据和其他参数的 POST 请求时,可以通过 `onUploadProgress` 监听上传进度。由于整个请求体被视为一个单元,所以进度可能不够精确,但可以模拟进度反馈。前端示例代码展示如何创建一个包含 Base64 图片数据和额外参数的 `FormData` 对象,并在上传时更新进度条。后端使用如 Express 和 Multer 可处理 Base64 数据。注意,实际进度可能不如文件上传精确,显示简单加载状态可能更合适。
|
4月前
|
JavaScript 前端开发 数据格式
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
254 0