函数参数arguments共享问题

###函数参数arguments共享问题
在JavaScript中,传进来的函数参数可以用函数上下文里的内部对象arguments访问[^footnote].。它包括如下属性:
: callee:指向当前函数的引用,
: length : 实际传递进来的参数的个数
: properties-indexes (字符串类型的整数) 属性的值就是函数的参数值(按参数列表从左到右排列)。 properties-indexes内部元素的个数等于arguments.length. properties-indexes 的值和实际传递进来的参数之间是共享的
> 所以,我们一般通过arguments[0]这种形式可以访问到传进来函数的参数值,实际上是通过arguments的properties-indexes属性来访问。根据properties-indexes属性的定义,arguments[0]这种访问函数参数的方式只能和实际有传进来的参数共享,对于那些函数声明定义里面存在却在函数执行时未真正传进来的参数,不能与arguments[0]这种方式共享。

<html>
<body>
<script type="text/javascript">
function foo(x, y, z) {
  console.log("[x]"+x);//[x] 10
  arguments[0] = 450;
  console.log("[x]"+x);//[x] 450
  console.log(y); // undefined
  y = 30;
  arguments[1] = 50;
  console.log(y); // 30
}
foo(10);
</script>
</body>
</html>

在上面代码中我们看到,我们在函数中传进来一个参数x的值,在函数内部通过arguments[0]这种方式去改变函数参数的值,只有对x的改变生效,当使用 arguments[1]的方式去改变y的值,发现改变后不能和y共享。
注意,在严格模式下,x的值将始终为10


刚开始了解学习ecmascript规范相关的新人
[^footnote]: http://dmitrysoshnikov.com/ecmascript/ru-chapter-2-variable-object/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值