代码片段一:
function b(x, y, a) {
arguments[2] = {"name" : "func"};
alert(a.name); //"func"
}
b(1, 2, {"name" : "win"});
代码片段二:
function b(x, y, a) {
var arr = [x,y,a];
arr[2] = {"name" : "func"};
alert(a.name); //"win"
}
b(1, 2, {"name" : "win"});
逛网站的时候偶然发现了代码片段一,旁边有个学java的表示对代码片段一的结果很不理解,举出了代码片段二。应该从什么角度解释这两段代码结果的区别呢?求解。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
在第二段中
只改变了
arr数组、,并没有修改到实际的a,你可以试着在第二段代码中console.log(arguments)来查看结果首先数组和类数组都是对象,变量名存储的是指向对象的指针。
这样就可以说明,args和arr是两个对象,所以修改arr对args没有任何影响。
其次,args与参数变量的之间的关系特别的微妙,在传值不传值,是不是严格模式下,对其中一个赋值,表现各不相同,最好不用对args这样玩
Javascript其实和Java一样,函数调用的时候都是采用值传递,不知道题主了解这么吗?下面先说明一下这个问题:
题主上述例子中,
var arr = [x,y,a],实际上就是var arr = new Array(x,,a);,当然参数的传递也是值传递。