javascript——值传递!!

基本概念:【瞄一眼就好~~】

按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。

按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。

原始数据类型【Undefined、Null、Boolean、Number、String】&&对象类型 【Object,Array,Function,Date等】都是按照值传递的,只不过原始数据类型传递的值是原始值,即变量的值;对象类型传递的值是对象在堆内存中的内存地址

例1:

    var a1 = 1;
    function foo(a) {
        a = 2;
    }
    foo(a1);
    alert(a1);//1,未改变

例2:

    var obj = {
        x : 1
    };
    function foo(o) {
        o.x = 3;
    }
    foo(obj);
    alert(obj.x);//3,发生改变 

例3:

    var obj = {
        x : 1
    };
    function foo(o) {
        o = 100;
    }
    foo(obj);
    alert(obj.x);//1,未改变 

例4: 

    function setName(obj) {
        //为了便于区分,将下列三个obj分别设为obj1,obj2,obj3
        obj.name = "Nicholas";//obj1
        obj = 100;//obj2
        obj = new Object();//obj3
        obj.name = "Greg";
    }
    var person = new Object();
    setName(person);
    alert(person.name);//"Nicholas"

++什么是值传递?什么是引用传递?(review)

++可参考知乎文章:http://www.zhihu.com/question/27114726

原文地址:https://www.cnblogs.com/feile/p/5329274.html