导航

函数的参数也是按引用传递的?

Posted on 2015-11-15 21:05  powerlx  阅读(209)  评论(0编辑  收藏  举报

老师,为什么《JavaScript高级程序设计》里说,函数的参数是按值传递的呢?书里的实例代码如下:

function setName(obj) {
    obj.name = "Nicholas";
    obj = new Object();
    obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name);//=>"Nicholas" 


  • 把代码再改下,看的清楚一些

    function setName(obj) {

         obj.name = "Nicholas";

         obj = new Object();

         obj.name = "Greg";

         alert(obj.name);

         alert(person.name);

    }

    var person = new Object();

    setName(person);

    alert(person.name);//= >"Nicholas"

    在setname中,第一个obj是带入的person全局变量

    因为obj定义了其子属性,所以实际上修改的是person的值,如果不是子属性则该规则在此处无效

    然后又重新定义了一个obj=new  Object();这个定义是发生在函数里面的

    因此它的作用域就在函数内部,后面对obj.name赋值,则是对内部变量的赋值

    当setName方法结束后,obj的也被清理出内存,而全局变量person则保留