首页 > 类数组对象arguments和数组在应用时的区别

类数组对象arguments和数组在应用时的区别

代码片段一:

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的表示对代码片段一的结果很不理解,举出了代码片段二。应该从什么角度解释这两段代码结果的区别呢?求解。


首先数组和类数组都是对象,变量名存储的是指向对象的指针。

这样就可以说明,args和arr是两个对象,所以修改arr对args没有任何影响。

其次,args与参数变量的之间的关系特别的微妙,在传值不传值,是不是严格模式下,对其中一个赋值,表现各不相同,最好不用对args这样玩


在第二段中

arr[2] = {"name" : "func"};

只改变了arr数组、,并没有修改到实际的a,你可以试着在第二段代码中console.log(arguments)来查看结果


Javascript其实和Java一样,函数调用的时候都是采用值传递,不知道题主了解这么吗?下面先说明一下这个问题:

var obj = {a:1};
function process(obj){
    obj = {};
}

process(obj);
//调用process方法把obj传入实际上传入的是obj对象的引用的值的copy
//所以后面把参数重新引用了一个新的对象不会影响实际参数

obj.a    // 还是1

题主上述例子中,var arr = [x,y,a],实际上就是var arr = new Array(x,,a);,当然参数的传递也是值传递。

【热门文章】
【热门文章】