问题是,当整数,字符串和数组作为JavaScript中的函数参数传递时,有什么区别?

以下是我的问题:

<html>
    <head>
        <script>
            var a = 0;
            var b = new Array();
            b.push(0);

            function Add(num) {
                num++;
            }

            function Add1(num) {
                num[0]++;
            }

            Add(a);
            Add1(b);

            alert(a);
            alert(b[0]);
        </script>
    </head>

    <body></body>
</html>


它最终提供了两个不同的价值,为什么呢?第一个结果为0,第二个结果为1

最佳答案

作为对象的数组通过引用在函数中传递,而基元(例如字符串和数字)通过值传递。这是一个例子:

function test(arr, obj, prim) {
    arr[0]++;    // by reference
    obj.prop++;  // by reference
    prim++;      // by value

    return prim; // to get the amended primitive value back
}

var arr = [0],
    obj = { prop: 0 },
    prim = 0,
    result;

result = test(arr, obj, prim);

console.log(arr, obj, prim);  // [1], Object {prop: 1}, 0
console.log(result);          // 1


好的文章:http://snook.ca/archives/javascript/javascript_pass

09-20 13:14