更改node.js的外部参数var



请先看这3个代码块。

代码块1:

var t1 = function(aaa) {
        setTimeout(function(){
        a = 'bb';
        aaa.push(a);
    }, 1000);
}
var t3 = function() {
    var aa = new Array;
    aa[0] = 'aa';
    console.log(aa);
    t1(aa);
    setTimeout(function(){
        console.log(aa);
    }, 3000);
}
t3();

输出:["aa"][‘aa’,‘bb’]


代码块2:

var t1 = function(aaa) {
        setTimeout(function(){
        aaa[1] = 'bb';
    }, 1000);
}
var t3 = function() {
    var aa = new Array;
    aa[0] = 'aa';
    console.log(aa);
    t1(aa);
    setTimeout(function(){
        console.log(aa);
    }, 3000);
}
t3();

输出:["aa"][‘aa’,‘bb’]


代码块3:

var t1 = function(aaa) {
        setTimeout(function(){
        aaa = aaa.concat('bb');
    }, 1000);
}
var t3 = function() {
    var aa = new Array;
    aa[0] = 'aa';
    console.log(aa);
    t1(aa);
    setTimeout(function(){
        console.log(aa);
    }, 3000);
}
t3();

输出:["aa"][‘aa’]


问题是代码块3中的"concat"方法无法修改"aaa"var pass-by-参数
"concat"、"push"和直接修改有什么区别?

在代码块1和2中,您正在修改aa的内容。

在代码块3中,您正在aaa重新绑定到另一个数组,并且函数t1中的aaa不再是对外部aa的引用。因此,外部aa没有被修改。

您可以参考JavaScript是一种通过引用的语言还是通过值的语言?查看有关Javascript变量传递行为的详细说明。

最新更新