传递给JavaScript函数的值是值类型(有时)

时间:2017-08-04 11:01:53

标签: javascript pass-by-reference pass-by-value

在循环中使用延迟时,我正在传递循环索引,如下所示

for (var t = 0; t < 3; t++) {
    var t1 = {};
    t1['a'] = String(t);
    setTimeout(function () {
        console.log("Step ", t1);
    }, 1000);
}

编辑:这里t1是一个局部变量,即它仅限于一次迭代。

控制台输出

Step  Object {a: "2"}
Step  Object {a: "2"}
Step  Object {a: "2"}

当我使用下面的函数

包装for循环内容时
var func = function (index) {
        var t1 = {};
        t1['a'] = String(index);
        setTimeout(function () {
            console.log("Step ", t1);
        }, 1000);
    };
for (var t = 0; t < 3; t++) {
    func(t);   
}

控制台输出

Step  Object {a: "0"} 
Step  Object {a: "1"} 
Step  Object {a: "2"}

因此,在第一个例子中,值是通过引用传递的,而第二个例子则不是。

任何人都可以解释这种行为。

0 个答案:

没有答案