網絡上看到一篇文章,《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 閱讀(7676) 評論(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

          搜索

          •  

          積分與排名

          • 積分 - 914173
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 清河县| 喀喇| 南京市| 旺苍县| 荔浦县| 烟台市| 日喀则市| 沅江市| 三原县| 铜山县| 阳信县| 象州县| 望谟县| 长顺县| 丹巴县| 贵港市| 长宁县| 衡阳县| 方城县| 茂名市| 石棉县| 章丘市| 翁牛特旗| 延吉市| 天镇县| 江油市| 商河县| 深泽县| 文山县| 青浦区| 宜兰县| 泗阳县| 车险| 广宁县| 河津市| 南漳县| 泸水县| 阳城县| 闵行区| 金湖县| 光泽县|