问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是JS中的arguments对象

发布网友 发布时间:2022-05-11 04:52

我来回答

3个回答

懂视网 时间:2022-05-12 13:16

一.在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。可以通过如下代码得以证实(当然,实际上,在函数funcArg中,调用arguments是不必要写成funcArg.arguments,直接写arguments即可)。

Js代码

Array.prototype.testArg = "test"; 
function funcArg() { 
 alert(funcArg.arguments.testArg); 
 alert(funcArg.arguments[0]); 
} 
 
alert(new Array().testArg); // result: "test" 
funcArg(10);  // result: "undefined" "10"

二.arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。

Js代码

function f(a, b, c){ 
 alert(arguments.length); // result: "2" 
 a = 100; 
 alert(arguments[0]); // result: "100" 
 arguments[0] = "qqyumidi"; 
 alert(a);   // result: "qqyumidi" 
 alert(c);   // result: "undefined" 
 c = 2012; 
 alert(arguments[2]); // result: "undefined" 
} 
 
f(1, 2);

三.由JavaScript中函数的声明和调用特性,可以看出JavaScript中函数是不能重载的。

根据其他语言中重载的依据:"函数返回值不同或形参个数不同",我们可以得出上述结论:

第一:Javascript函数的声明是没有返回值类型这一说法的;

第二:JavaScript中形参的个数严格意义上来讲只是为了方便在函数中的变量操作,实际上实参已经存储在arguments对象中了。

另外,从JavaScript函数本身深入理解为什么JavaScript中函数是不能重载的:在JavaScript中,函数其实也是对象,函数名是关于函数的引用,或者说函数名本身就是变量。对于如下所示的函数声明与函数表达式,其实含以上是一样的(在不考虑函数声明与函数表达式区别的前提下),非常有利于我们理解JavaScript中函数是不能重载的这一特性。

Js代码

function f(a){ 
 return a + 10; 
} 
 
function f(a){ 
 return a - 10; 
} 
 
// 在不考虑函数声明与函数表达式区别的前提下,其等价于如下 
 
var f = function(a){ 
 return a + 10; 
} 
 
var f = function(a){ 
 return a - 10; 
}

四.arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。

如下:

Js代码

function count(a){ 
 if(a==1){ 
 return 1; 
 } 
 return a + arguments.callee(--a); 
} 
 
var mm = count(10); 
alert(mm);

热心网友 时间:2022-05-12 10:24

1、首先arguments对象是一个类数组对象,形似数组,但却不是数组,它会有属于自己的一些属性和方法。当我们给函数传入了一些参数的时候(或者并没有传入参数只是调用的时候),在函数内部我们就可以获取到这个arguments对象,这个对象是js把我们传入函数的参数储存起来的对象

2、写个例子看一下

function functBox(){
console.log(arguments)
}
functBox(1);

我们在浏览器输出看一下

对象包含一个length属性,她代表的是我们传入函数参数集合的长度,并且会把参数一一列出来第一个参数就是下标为0的值,以此类推

假设我们这样调用

functBox(1,[1,2,3],'这是参数3');

输出看一下

我们传入的参数一览无余

热心网友 时间:2022-05-12 11:42

参考下我的js笔记
在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象 arguments[0],arguments.length
arguments是什么?
答:1:arguments是收到的实参副本
在词法分析中, 首先按形参形成AO的属性,值为undefined
当实参传来时, 再修改AO的相应属性.
2:并把所有收到实参收集起来,放到一个arguments对象里
t(a,b,c){},
调用时: t(1,2,3,4,5) 5个参数
此时 , AO属性只有a,bc,3个属性
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单机组装6000元预算,INTEL和AMD下不同的配置方案 手上有5000元,想DIY一台台式机,主要是玩大型单机游戏,像孤岛危机2。求... ...及各自优点缺点和如何修改。。 CPU 至强 E3 1230 v2主板 微星Z... 求配家用游戏电脑4000-6000 嘴巴上长水泡怎么办? 嘴巴旁边长了水泡怎么回事 他不回信息的句子 市面上有哪些浪漫又个性的牛仔单品值得入手? 2021年流行什么外套显瘦不挑身材 夏季有哪些百搭又显高级的单品值得选择? 灵芝和什么搭配治失眠好 js中的arguments是什么东东 JS里这种形参是什么意思?对应什么知识点? intellij idea分布式系统怎么运行 抑郁的人会觉得自己抑郁吗,有哪些治疗的方法,合肥军海医院治疗抑郁效果如何? 焦虑有什么症状表现?合肥军海治疗焦虑好吗 IDEA中两个项目怎么设置依赖 什么是狂躁症 去合肥军海医院治狂躁症好吗? 抑郁的表现有哪些症状 合肥军海医院看抑郁如何? 娱满堂 写行书者 是哪位书法家 ? 网上军海在写书法时里面配的古筝音乐叫什么名字 军海的行书视频是怎样弄成负像的,需要下载一个什么软件才能办到 落款军海的书法家是谁? 有简军海行书字贴吗? 军海行书属于什么体 铺贴实木地板怎样合理规划 装修中怎么保留原来的地板 刚刚怀孕一个月左右,怎样预防流产? 铺地板还可以这样玩,几种拼法你见过吗 如何铺木地板的步骤以及如何铺木地板的注意事项 js 这种写法代表什么意思 init : function(type, args){} JS函数如何传递带空格参数 js中怎么样让arguments[arguments.length-1]表示那个加号 执行这段代码... js函数传两个参数第一个为空,怎么正确传递第二个参数值? js中arguments和event的关系 JS 脚本怎么接收命令行参数 新加坡买护肤品划算吗?免税店有哪些牌子值得购买? 干锅茶树菇的做法,干锅茶树菇怎么做 干锅茶树菇的做法 怎么做好吃 马来西亚 新加坡有什么比较值得买的东西? 去新加坡有什么值得买的东西和值得干的事? 新加坡有什么值得买的 儿童制作乐器的方法 成龙历险记有几部 水墨动画《牧笛》,一个小牧童的牛跑了,然后他吹着悠扬笛子,让万物陶醉... 小牧童吹的那个调子是什么? 熊出没之环球大冒险中光头强书法比赛是哪一集 成龙历险记2每级名字 在优酷 的七夕专区折纸玫瑰视频里面的第二首钢琴曲是什么曲? 宋陵公园是哪个皇帝 巩义市宋陵公园占地面积?