JavaScript-javascript 中函数的形参与 arguments 指向的不是同一个地址?
直接看代码:
function fun(x) {
arguments[0] = 1;
alert(x);
}
fun();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
直接看代码:
function fun(x) {
arguments[0] = 1;
alert(x);
}
fun();
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
通过看ECMA262上的文档
可见如果传入参数数量少于形参数量时,Arguments Object不会进行对未传入的形参初始化动作,所以fun()与fun(10)的表现形式不一致!
代码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了。