網(wǎng)絡(luò)上看到一篇文章,《JavaScript 傳遞參數(shù)是值傳遞?還是值傳遞啊?》

          地址:http://www.xiaoxiaozi.com/2010/03/05/1719/

          當然看這之前我是很清晰知道基本數(shù)據(jù)類型傳值,引用數(shù)據(jù)類型傳引用。

          剛看了個開頭就有點暈了,文章所說:

          “在本文開頭,首先,十萬以及萬分肯定的說一句,JavaScript 函數(shù)傳遞參數(shù)時,是值傳遞。”

          有興趣的朋友可以去看原文。 我看了之后就順手寫起了示例代碼:

          (1) 典型傳值

          function setName(name)
                      {
                          name 
          = "test";
                      }
                      
          var person = new Object();
                      person.name 
          = " hechangmin ";
                      
                      setName(person.name);
                      alert(person.name); 
          // hechangmin


          (2) 典型的傳引用

          function setName(obj)
                      {
                          obj.name 
          = "test";
                      }
                      
          var person = new Object();
                      person.name 
          = " hechangmin ";
                      
                      setName(person);
                      alert(person.name); 
          // test

          我想大家對輸出的結(jié)果都沒異議。這也是我記憶中的理解。

          下面帶領(lǐng)大家看一些可能引起大家議論的示例:

          var x = new Object();
                      x.name 
          = "test";
                          
                      
          function setName(obj)
                      {
                          obj 
          = x;
                          alert(obj 
          == x);    // true 因為上一句進行了賦值操作
                      }
                      
          var person = new Object();
                      person.name 
          = " hechangmin ";
                      
                      setName(person);
                      alert(person.name); 
          // hechangmin
                      alert(person == x); // false 

          傳進去的 person 肯定是 引用數(shù)據(jù)類型。(這點沒歧義)

          進去后發(fā)現(xiàn) 給引用賦以新值 x 。函數(shù)內(nèi)部 alert(obj == x); 也輸出了 true

          說明賦值是成功的。

          而函數(shù)執(zhí)行完畢,發(fā)現(xiàn)值依然沒變。 就這個結(jié)果來看,說是傳值還真沒什么說不過去的。

          但是我隨后在 http://www.aygfsteel.com/magicdoom/archive/2006/02/27/32555.html  (建議有興趣的朋友可以看看)找到一篇講 javascript 傳值 傳引用的文章。

          文章有說傳遞進去的引用型參數(shù),在內(nèi)部如果直接對引用參數(shù)賦值。 javascript 會自動生成一份copy ,而不去影響原有的引用。

          ===========

          綜上所述 ,基本就都明白。文章寫到這里基本就接近尾聲,不過這里提到了 javascript string , 下次有機會總結(jié)關(guān)于 string 的神奇后,再和大家分享交流。

          posted on 2010-03-18 16:12 -274°C 閱讀(7676) 評論(3)  編輯  收藏 所屬分類: web前端


          FeedBack:
          # re: 關(guān)于傳值和傳引用的插曲
          2011-01-22 09:18 | ffff
          fffffff  回復(fù)  更多評論
            
          # re: 關(guān)于傳值和傳引用的插曲
          2011-01-22 09:23 | ffff
          這個很容易理解嘛,
          在函數(shù)里,那個obj不是被換成x了嗎?
          本來obj是保存person的引用,當執(zhí)行了obj=x;時,obj就被改編成保存x的引用了。根本就沒有什么特別需要強調(diào)的吧?  回復(fù)  更多評論
            
          # re: 關(guān)于傳值和傳引用的插曲
          2014-07-11 09:24 | bandit
          大家不要看這篇文章 本來很簡單的事情反而被博主繞復(fù)雜了,  回復(fù)  更多評論
            

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914107
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 曲水县| 淮滨县| 时尚| 镇平县| 当雄县| 岑巩县| 济源市| 保康县| 伊春市| 泰顺县| 屏东县| 鹤壁市| 于田县| 文昌市| 温泉县| 枣阳市| 江孜县| 庆安县| 湘乡市| 庆城县| 山西省| 河南省| 东乡| 临漳县| 连平县| 廉江市| 左贡县| 泸水县| 甘孜| 班戈县| 顺昌县| 松溪县| 申扎县| 西乌珠穆沁旗| 山丹县| 增城市| 昔阳县| 平罗县| 湟中县| 夏邑县| 黄大仙区|