整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          前端基礎(chǔ) - Javascript函數(shù)傳值的方式

          文首發(fā)在個(gè)人博客上:http://www.brandhuang.com/article/1587859232291

          函數(shù)傳值

          《JavaScript高級(jí)程序設(shè)計(jì)》書中說(shuō):ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的。

          按值傳遞

          把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個(gè)變量復(fù)制到另一個(gè)變量一樣。

          基本數(shù)據(jù)類型

          傳遞的是原始值本身

          在函數(shù)中修改傳入的值,不會(huì)影響原來(lái)的數(shù)據(jù)

          var value = 1;
          function foo(v) {
              v = 2;
              console.log(v); //2
          }
          foo(value);
          console.log(value) // 1
          

          復(fù)雜數(shù)據(jù)類型

          傳遞的是對(duì)象的引用的副本,看下面兩個(gè)例子,看看有什么不一樣?

          // 例子1
          var obj = {
              value: 1
          };
          function foo(o) {
              o.value = 2;
              console.log(o.value); //2
          }
          foo(obj);
          console.log(obj.value) // 2
          // 例子2
          var obj = {
              value: 1
          };
          function foo(o) {
              o = 2;
              console.log(o); //2
          }
          foo(obj);
          console.log(obj.value) // 1
          

          解釋:

          對(duì)于復(fù)雜的數(shù)據(jù)類型,函數(shù)內(nèi)部的臨時(shí)變量和傳入的參數(shù)指向同一個(gè)內(nèi)存地址,所以有例子一,我們能通過(guò) o.value 找到內(nèi)存中的 o,也就找到了外部的 obj,所以我們修改 o.value 值的時(shí)候,也會(huì)影響 obj 中的 value 值。

          對(duì)于例子二,因?yàn)槭侵苯訉?duì)傳入的參數(shù)進(jìn)行了賦值操作,這會(huì)將內(nèi)部參數(shù) o 進(jìn)行重新綁定,指向了一個(gè)新的地址,所以此時(shí)修改函數(shù)內(nèi)部的值不會(huì)對(duì)外部有影響。

          參考文章

          https://segmentfault.com/q/1010000003023316

          感謝你的閱讀

          先就記錄這幾個(gè)知識(shí)點(diǎn)吧,多了一次性也記不住,大概率你也不會(huì)來(lái)看第二遍



          面之間互相傳值通常有以下幾種方法:

          1、URL (如:index.html?id=123)

          2、cookie

          3、本地存儲(chǔ) (localStorage、sessionStorage)

          sessionStorage與 localStorage很相似,不同之處在于 localStorage 里面存儲(chǔ)的數(shù)據(jù)沒(méi)有過(guò)期時(shí)間設(shè)置,而存儲(chǔ)在 sessionStorage 里面的數(shù)據(jù)在頁(yè)面會(huì)話結(jié)束時(shí)會(huì)被清除。(也就是localStorage長(zhǎng)期保存,sessionStorage 關(guān)閉頁(yè)面后清除)

          今天主要給大家介紹一下使用sessionStorage進(jìn)行頁(yè)面之間互相傳值(通信)

          思路:從A頁(yè)面跳轉(zhuǎn)到B頁(yè)面,然后B頁(yè)面獲取數(shù)據(jù)再傳到A頁(yè)面

          A頁(yè)面

          B頁(yè)面

          點(diǎn)擊B頁(yè)面按鈕返回A頁(yè)面,A頁(yè)面加載傳回來(lái)的數(shù)據(jù)“我是b頁(yè)面,張三豐”


          A頁(yè)面(a.html)

          B頁(yè)面(b.html)

          值傳值: 將一個(gè)變量的值拷貝一份賦給另一個(gè)變量。

          如果這個(gè)變量的值修改的話不會(huì)影響到另外一個(gè)變量, 這兩個(gè)變量之間沒(méi)有任何聯(lián)系。

          <script type="text/javascript">
              var num1 = 500
              var num2 = num1;
              num2 = 40;
              alert(num1); // 500;
          </script>


          引用傳址:將一個(gè)變量的地址賦給另一個(gè)變量。

          如果這個(gè)變量的值有修改的話那么另外一個(gè)變量將同時(shí)受到影響, 將一個(gè)變量的內(nèi)存地址賦值給另外一個(gè)變量, 這兩個(gè)變量同時(shí)指向同一個(gè)內(nèi)存地址,

          這兩個(gè)變量是有聯(lián)系的。

          <script type="text/javascript">
              var arr1 = [3, 5, 7, 8, 10, 11];
              var arr2 = arr1;
              arr2[0] = 13;
              alert(arr1); //[13, 5, 7, 8, 10, 11]
          </script>

          在javascript中基本數(shù)據(jù)類型的賦值操作都是賦值傳值;復(fù)合數(shù)據(jù)類型的賦值都是引用傳址。


          主站蜘蛛池模板: 亚洲av区一区二区三| 亚洲国产美国国产综合一区二区 | 久久精品国产一区二区三区| 亚洲Aⅴ无码一区二区二三区软件| 日本精品3d动漫一区二区| 国产精品一区二区三区99| 日韩精品一区二区亚洲AV观看| 日本高清一区二区三区| 2020天堂中文字幕一区在线观| 无码欧精品亚洲日韩一区夜夜嗨| 99久久精品国产一区二区成人 | 秋霞无码一区二区| 韩国福利影视一区二区三区| AV怡红院一区二区三区| 亚洲视频在线观看一区| 激情一区二区三区| 国产另类ts人妖一区二区三区| tom影院亚洲国产一区二区 | 国产91大片精品一区在线观看| 亚洲AV无码一区二区乱子仑| 福利在线一区二区| 2014AV天堂无码一区| 精品女同一区二区三区免费播放| 久久91精品国产一区二区| 精品乱人伦一区二区三区| 三级韩国一区久久二区综合| 日韩电影在线观看第一区| 亚洲国产成人久久一区WWW | 日韩视频在线一区| 91福利一区二区| 精品伦精品一区二区三区视频| 国产美女视频一区| 一区二区三区四区在线播放 | 国产福利无码一区在线| 国产成人无码一区二区三区在线 | 亚洲av综合av一区| 精品乱子伦一区二区三区高清免费播放| 福利片福利一区二区三区| 国产亚洲综合精品一区二区三区 | 无码人妻aⅴ一区二区三区| 免费无码毛片一区二区APP|