发表于: 2018-06-23 22:48:00

1 755


今日完成:

   修改任务十四

   学习循环函数、几个内置函数、以及随机函数

   任务一可以给三个格子随机的颜色

明日计划:

   任务一完成定时函数

今日问题:

    函数参数的值传递问题,已经理解,见收货部分。 

今日收获:  

一。 ECMAScript 中所有函数的参数按值传递。 

   传值   

      是把实参的值赋值给行参   

      那么对行参的修改,不会影响实参的值 

   传地址   

      是传值的一种特殊方式,只是他传递的是地址,不是普通的如int   

      那么传地址以后,实参和行参都指向同一个对象 

   传引用   

      真正的以地址的方式传递参数   

      传递以后,行参和实参都是同一个对象,只是他们名字不同而已   

       对行参的修改将影响实参的值

1.当参数是值类型的时候

  function  changeStuff(num){

      num = num * 10;

  }

var  num = 10; //实参复制它的值给形参,就是上面那个num.形参进行运算不影响实参的值。

changeStuff(num);  

alert(num);//10

2.当参数是object类型时

(1).function changeStuff1(obj1){

    obj1.item =  "changed";//此时,形参指向了新建对象的内存地址,并且修改了此地址对象的item属性,                    由于实参与形参指向同一个对象,此时,对象属性的改变也反映在实参上。

} 

var  obj1 =  new  Object();

obj1.item =  "unchanged";

changeStuff1(obj1);//当参数为object时,它的值是保存在内存中的对象,而形参此时复制的是指向内存对象的               指针,

alert(obj1.item);//changed

(2).function  changeStuff2(obj2){

    obj2 = {item:"changed"};//不同之处

}

 var  obj2 =  new  Object();

obj2.item =  "unchanged"; 

changeStuff2(obj2);

alert(obj2.item);//unchanged

(2)和(1)的不同之处在于,实参把指针复制给形参后,实参的指针始终不变,而此时形参发生变化,指向了新的内存地址,所以alert(obj2.item);//unchanged。

 如果,obj2是按照引用传递的,那么obj2实参是会自动修改为指向其name属性值为“changed”的新对象。但是,实际上在函数内部修改参数的值,原始的引用保持未变。

 最后得出结论,JavaScript 中所有函数的参数都是按值传递的 ,只是对于Object类型来说,这个值本身就是一个指向Object对象的地址。

参考资料出自 https://blog.csdn.net/hangzhou2dan/article/details/39720543





 

    

   


返回列表 返回列表
评论

    分享到