網絡上看到一篇文章,《JavaScript 傳遞參數是值傳遞?還是值傳遞啊?》

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

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

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

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

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

          (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

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

          下面帶領大家看一些可能引起大家議論的示例:

          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 肯定是 引用數據類型。(這點沒歧義)

          進去后發現 給引用賦以新值 x 。函數內部 alert(obj == x); 也輸出了 true

          說明賦值是成功的。

          而函數執行完畢,發現值依然沒變。 就這個結果來看,說是傳值還真沒什么說不過去的。

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

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

          ===========

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

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


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

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916103
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 壤塘县| 盘山县| 南康市| 安顺市| 澄城县| 化德县| 城固县| 佛教| 鄢陵县| 都安| 合水县| 塘沽区| 竹北市| 清水河县| 潍坊市| 平远县| 凯里市| 恩施市| 濮阳县| 兴安县| 屏南县| 大城县| 东源县| 西华县| 五峰| 绥阳县| 衡水市| 会同县| 齐齐哈尔市| 台安县| 红河县| 卓资县| 株洲市| 延安市| 濉溪县| 延津县| 黔西县| 南郑县| 普兰县| 汶川县| 东兰县|