javascript - 为什么不能在函数内通过给arguments对象添加数组传递参数?
巴扎黑
巴扎黑 2017-04-11 11:53:48
[JavaScript讨论组]
function sum(a1,a2)
{
    arguments = [5,6];
    var x = a1+a2;
    alert(x);
}
sum();

参数不是以数组存储在arguments对象中吗?
为甚么弹出NaN?

巴扎黑
巴扎黑

全部回复(3)
怪我咯

是,你是重新赋值了arguments,但是a1和a2的值不会从arguments自动赋值过去的,a1和a2的值获取还是在你调用sum()的时候获取的,你没传参,自然是NaN,所以这里,arguments确实是有数据的,5和6,你赋值的,a1和a2是没有数据的

伊谢尔伦

因为比如

var a1 = undefined, a2 = undefined;
var arguments = [a1, a2];
arguments = [3, 4];

这个时候a1,a2仍然是undefined,undefined + undefined == NaN

阿神

首先要注意的是:
javascript函数体内,arguments像数组(并不是真的数组,是一个Arguments对象,再次强调)一样,有length属性,可以代表传给函数的参数的个数。
javascript中Arguments对象是函数的实际参数,arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。
另外:
在es5规范下的非严格模式下,你的代码是可行的。即可以这样修改。
es5规范的严格模式下,效果等同你现在的效果。
但自es6之后,非严格模式下效果也如同你现在的效果一样,即arguments和参数符号分别存放。
而es6的严格模式下,修改arguments会报错。

Uncaught SyntaxError: Unexpected eval or arguments in strict mode

所以,熟读es规范很有必要啊。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号