JavaScript-javascript 中函数的形参与 arguments 指向的不是同一个地址?

发布于 2017-02-10 09:54:08 字数 132 浏览 1237 评论 2

直接看代码:

function fun(x) {    
arguments[0] = 1;
alert(x);
}
fun();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2017-09-04 12:01:58

通过看ECMA262上的文档

1、 Let len be the number of elements in args.
....
10、 Let indx = len - 1.
11、 Repeat while indx >= 0,
.....

可见如果传入参数数量少于形参数量时,Arguments Object不会进行对未传入的形参初始化动作,所以fun()与fun(10)的表现形式不一致!

想挽留 2017-03-16 16:42:09

代码1:
function fun(x) {
arguments[0] = 1;
alert(x);
}
fun();
fun(6);

说明:
1、fun()在调用时没有传参数,那么fun(x)中的参数x就是undefined,而arguments对象也是一个空对象,由于没有传参数,JavaScript也没有为x分配内存,所以alert(typeof(x))也是undefined,那么函数体里为arguments[0]=1赋值和x没有任何关系,那么alert(x)当然是undefined了。

2、fun(6)在调用时传参数,那么JavaScript就会为函数fun(x)中的参数x分配一个内存并赋值6,由于对象是基于引用的赋值的,所以arguments对象的第一个元素[0]也指向了x所对应的内存地址,而现在在函数体里为arguments[0]=1,由于它们是指向同一个地址,相当于也改变了x的值,那么alert(x)当然是1了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文