js 的arguments的一些理解资料
初学js的时候,对arguments这个东西常见,就是搞不清他的意思~ 下面是我找到的一些资料和我的理解,终于弄懂了这个家伙
首先arguments指向实参对象
在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象 arguments[0],arguments.length,类数组不是数组,虽然也有数组的前面这两种属性,具体判断可以使用instanceof来判断一下
instanceof 用于判断一个实例是否是某种类型 在 typeof 方法返回 “object” 的情况下,instanceof 方法还是很有用的。
arrayLike instanceof Array
// false 其值是布尔值那么问题来了
arguments是什么?
1. arguments是收到的实参副本
在词法分析中, 首先按形参形成AO的属性,值为undefined
当实参传来时, 再修改AO的相应属性.
2:并把所有收到实参收集起来,放到一个arguments对象里
function t(a,b,c){},
调用时: t(1,2,3,4,5) 5个参数,这里传入了5个参数
此时 , AO属性只有a,bc,3个属性, 但是arguments里有1,2,3,4,5, 所有的值,这个arguments就用来存储传入的所有参数
对于超出形参个数之外的实参, 可以通过arguments来获得
3. arguments 的索引 从 0, 1,2,....递增,与实参逐个对应
4. arguments.length 属性代表实参的个数
5. arguments一定不是数组, 是长的比较像数组的一个对象,虽然也有length属性
6:arguments每个函数都会有,因此,arguemnts只会在内部找自身的arguments,
无法引用到外层的arguments
1 <script type="text/javascript"> 2 // 求圆形面积,矩形面积, 三角形面积 3 function area () { 4 if(arguments.length == 1) { 5 alert(3.14 * arguments[0] * arguments[0]); 6 } else if(arguments.length == 2) { 7 alert(arguments[0] * arguments[1]); 8 } else if(arguments.length == 3) { 9 alert(arguments[0] + arguments[1] + arguments[2]); 10 } else { 11 return null; 12 } 13 } 14 area(10,20,30); 15 16 </script>
下面是W3C上的一些解释
arguments 对象
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。
因此,无需明确命名参数,就可以重写函数:
function sayHi() {
if (arguments[0] == "bye") {
return;
}
alert(arguments[0]);
}
检测参数个数
还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。
下面的代码将输出每次调用函数使用的参数个数:
1 function howManyArgs() { 2 3 alert(arguments.length); 4 5 } 6 7 8 9 howManyArgs("string", 45); 10 11 howManyArgs(); 12 13 howManyArgs(12);
上面这段代码将依次显示 "2"、"0" 和 "1"。
注释:与其他程序设计语言不同,ECMAScript 不会验证传递给函数的参数个数是否等于函数定义的参数个数。开发者定义的函数都可以接受任意个数的参数(根据 Netscape 的文档,最多可接受 255 个),而不会引发任何错误。任何遗漏的参数都会以 undefined 传递给函数,多余的函数将忽略。
转载于:https://www.cnblogs.com/nostic/p/5406472.html
js 的arguments的一些理解资料相关推荐
- [js] 说说你对js对象生命周期的理解
[js] 说说你对js对象生命周期的理解 一切皆对象 咱们经常听到JS中"一切皆对象"?有没有问想过这是什么意思?其它语言也有"一切皆对象"之说,如Python ...
- js 添加属性_轻松理解JS中的面向对象,顺便搞懂prototype和__proto__
这篇文章主要讲一下JS中面向对象以及 __proto__,ptototype和construcator,这几个概念都是相关的,所以一起讲了. 在讲这个之前我们先来说说类,了解面向对象的朋友应该都知道, ...
- js中arguments的理解
一.在函数调用的时候,浏览器每次都会传递进来两个隐式参数 1.函数的上下文对象this 2.封装实参的对象arguments 二.arguments对象 1.arguments对象实际是所在函数的一个 ...
- js中arguments理解
什么是arguments? 它是JS的一个内置对象 .函数内部的类数组对象.因为在js函数对象中传递的形参 可以传也可以不传,若方法里没有写参数却传入了参数,该如何拿到参数呢,答案就是argument ...
- 探究js中arguments
类数组对象:arguments 总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做argume ...
- Js中匿名函数的理解
目录 1.js中匿名函数的N种写法 最常见的用法: 2.JavaScript 匿名函数及闭包 2.1 匿名函数 2.1.1 函数的定义 2.1.2 匿名函数的创建 2.2 闭包 2.3 举例 2.4 ...
- js的arguments到底是什么?
类数组对象:arguments 众所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments ...
- JS中同步与异步的理解
你应该知道,javascript语言是一门"单线程"的语言,不像java语言,类继承Thread再来个thread.start就可以开辟一个线程,所以,javascript就像一条 ...
- JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后
Brief 一天有个朋友问我"JS中计算0.7 * 180怎么会等于125.99999999998,坑也太多了吧!"那时我猜测是二进制表示数值时发生round-off error所 ...
- js 闭包及其相关知识点理解
本文结合个人学习及实践,对闭包及相关知识点进行总结记录,欢迎读者提出任何不足之处 一.js变量 二.作用域(scope) 三.[[scope]] 和 scope chain 四.作用域(scope)和 ...
最新文章
- jasonrpcbridge
- 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务
- Flask详解(中篇)
- Tomcat内存溢出的三种情况及解决办法分析
- Spreadjs表格
- 登录SYSTEM账户 Windows黑科技 首创方法 教程附源码(c++)
- mysql 表间关联查询
- 面试经典-你为什么觉得自己能够在这个职位上取得成就?
- 电子合同的一个“安全漏洞”
- 活动详情页面html代码,折扣活动详情.html
- PMP证书好考吗?难度如何?
- 【软考 系统架构设计师】计算机网络② 网络规划与设计
- 每日面试1题-如何防止CDN防护被绕过
- 浅谈滴滴需求响应式公交背后的技术
- 伊登软件BPM/EIP解决方案
- 总体规划,循序渐进,分步实施
- php获取中文拼音(含生僻字,多音字,音标)支持首字母,全拼
- 打印机共享0x00000709错误
- 华为HiLink 云云对接 后台开发的一些细节和坑
- 零基础的我刷力扣一周后,总结了点东西