美文网首页
JavaScript参数传递

JavaScript参数传递

作者: MajorDong | 来源:发表于2019-12-05 17:57 被阅读0次

    《javascript高级程序设计》4.1.3:所有函数的参数都是按值传递的

    就是说把函数外部的值赋值给函数内部的参数,就和把值从一个变量复制到另一个变量一样。

    按值传递(基本类型)

    var value = 1;
    function foo(v) {
        v = 2;
        console.log(v); //2
    }
    foo(value);
    console.log(value) // 1
    

    可以理解为,给函数的型参赋值(函数型参此时已声明但为赋值),由于基本类型的值是存储在栈内存中(stack)。将变量value的值传递给型参v,但value自己的值不改变。

    按值传递(引用类型)

    var obj = {
        value: 1
    };
    function foo(o) {
        o.value = 2;
        console.log(o.value); //2
    }
    foo(obj);
    console.log(obj.value) // 2
    

    变量obj被声明在栈内存中,存着引用类型在堆内存(heap)中的地址,将引用类型的地址传递给型参o。函数foo可以通过这个地址访问到堆内存中的引用类型,并进行修改。

    var obj = {
        value: 1
    };
    function foo(o) {
        o = 2;
        console.log(o); //2
    }
    foo(obj);
    console.log(obj.value) // 1
    

    obj存在栈内存中的地址被传递给型参o,型参后被赋值o=2,就和obj没有任何关系了。

    总结:

    重的来说,JavaScript中所有函数都是按值传参,只是分为传递的是

    1. 基本类型的值
    2. 引用类型的引用地址

    相关文章

      网友评论

          本文标题:JavaScript参数传递

          本文链接:https://www.haomeiwen.com/subject/uakjgctx.html