深入arguments

本文详细解析了ECMAScript中arguments对象的内部实现原理,包括其属性和特性,通过具体示例展示了如何使用arguments对象来操作函数参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

arguments对象的内部实现原理:
ECMA中的描述:
10.1.8 Arguments Object
When control enters an execution context for function code, an arguments object is created and initialised as follows:
The value of the internal [[Prototype]] property of the arguments object is the original Object prototype object, the one that is the initial value of Object.prototype (see 15.2.3.1).
A property is created with name callee and property attributes { DontEnum }. The initial value of this property is the Function object being executed. This allows anonymous functions to be recursive.
A property is created with name length and property attributes { DontEnum }. The initial value of this property is the number of actual parameter values supplied by the caller.
For each non-negative integer, arg, less than the value of the length property, a property is created with name ToString(arg) and property attributes { DontEnum }. 
The initial value of this property is the value of the corresponding actual parameter supplied by the caller. The first actual parameter value corresponds to arg = 0, the second to arg = 1, and so on. 
In the case when arg is less than the number of formal parameters for the Function object, 
this property shares its value with the corresponding property of the activation object. This means that changing this property changes the corresponding property of the activation object and vice versa.

<script>
//demo01:
(function (a,b){
	arguments[1]=2;
	var b=3;
	alert(arguments[1]);//2
})(1);
//demo02:
(function (a,b){
	arguments[1]=2;
	alert(b);//undefined
})(1);
//demo03:
(function (a,b){
	arguments[0]=2;
	var a=3;
	alert(arguments[0]);//3
})(1);
//demo04:
(function (a){
	arguments[0]=2;
	var a=4;
	alert(arguments[0]);//4
})(1);
//demo05:
(function (a){
	console.log(arguments);//[1]
	Array.prototype.splice.call(arguments,0,1);
	console.log(arguments);//[]
	alert(a+"---"+arguments[0]);//1---undefined
})(1);
//demo06:
(function (a){
	var arr = Array.prototype.splice.call(arguments,0,1);
	alert(a+"---"+arr[0]);//1---undefined
})(1);
</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值