function person(name,age)
{
      this.name = name;
      this.age = age;
      this.say =funcsay;
}
function funcsay()
{
      alert(this.name + ":" + this.age);
}
function change(p)
{
      p.name = "lisi";
}
var person1 =new person("zhangsan",18)
change(person1);
person1.say();在上面的代码输出效果是:按照普通函数的传递规则,person1.name的值不应该改变成“lisi”的,求解为什么?
难道是change函数只是定义了p这个参数,而没有定义person1.name,所以chang函数改变了person1.name的值。哪位大神知道啊?求指点,感谢了

解决方案 »

  1.   

    function change(p) //传入的值是person1啊,那p= person1
    {
          p.name = "lisi";
    }
      

  2.   

    你传入的是一个全局的变量  
    所以修改的就是person1啊
      

  3.   

    一般的函数传参,有值传递和引用传递两种。楼主用事实证明了,这里进行了引用传递,也就是说将person1指向的地址值传递给了p,这样p和person1指向相同地址,修改了p.name当然也就修改了person1.name