最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談JavaScript 函數(shù)參數(shù)傳遞到底是值傳遞還是引用傳遞

 更新時間:2016年08月23日 09:57:51   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談JavaScript 函數(shù)參數(shù)傳遞到底是值傳遞還是引用傳遞。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在傳統(tǒng)的觀念里,都認為JavaScript函數(shù)傳遞的是引用傳遞(也稱之為指針傳遞),也有人認為是值傳遞和引用傳遞都具備。那么JS的參數(shù)傳遞到底是怎么回事呢?事實上以下的演示也完全可以用于Java

首先來一個比較簡單的,基本類型的傳遞:

function add(num){
  num+=10;
  return num;
}
num=10;
alert(add(num));
aelrt(num);
//輸出20,10

對于這里的輸出20,10,按照JS的官方解釋就是在基本類型參數(shù)傳遞的時候,做了一件復(fù)制棧幀的拷貝動作,這樣外部聲明的變量num和函數(shù)參數(shù)的num,擁有完全相同的值,但擁有完全不同的參數(shù)地址,兩者誰都不認識誰,在函數(shù)調(diào)用返回的時候彈出函數(shù)參數(shù)num棧幀。所以改變函數(shù)參數(shù)num,對原有的外部變量沒有一點影響。

再來看一個較復(fù)雜的,對象引用類型的傳遞:

function setName(obj){
  obj.name="ted";
}
var obj=new Object();
setName(obj);
alert(obj.name);
//輸出ted

以上代碼的運行的實質(zhì)是:創(chuàng)建了一個object對象,將其引用賦給obj(在C里面就直接是一個內(nèi)存地址的賦值),然后在傳遞函數(shù)參數(shù)的時候,做了一件與前一個方法相同的事情,復(fù)制了一個棧幀給函數(shù)參數(shù)的obj,兩者擁有相同的值(不妨將其理解為object對象的地址),然后在setName做改變的時候,事實上是改變了object對象自身的值(在JAVA里稱之為可變類),在改變完成之后同樣也要彈出函數(shù)參數(shù)obj對應(yīng)的棧幀。

所以對應(yīng)的輸出是改變后object對象的值

那么可能有的朋友可能會問,這樣也可以理解為一個引用傳遞(指針傳遞)呀?不,這里嚴格的說,在和JAVA類似的語言中,已經(jīng)沒有了指針,在JAVA里將上述過程稱之為一個從符號引用到直接引用的解析過程。在C里面,指針就是一個具有固定長度的類型(在大多數(shù)的C編譯器里是2個字節(jié)),但在JAVA類似的語言里,引用也有自己的屬性和方法,只是你不能直接去訪問和控制它,所以它從某種意義上也是一種對象,這種機制也很大程度的避免了內(nèi)存泄露,術(shù)語稱之為內(nèi)存結(jié)構(gòu)化訪問機制。

為了證明上述觀點,稍微改造下上述例子:

function setName(obj){
  obj.name="ted";
  obj=new Object();
  obj.name="marry";
}
var obj=new Object();
setName(obj);
alert(obj.name);
//輸出ted

這個例子與上一個例子的唯一不同是這里將一個新的對象賦給了函數(shù)參數(shù)obj,這樣函數(shù)參數(shù)obj和原有的引用obj參數(shù),有著完全不同的值和內(nèi)存地址。

以上這篇淺談JavaScript 函數(shù)參數(shù)傳遞到底是值傳遞還是引用傳遞就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • TypeScript常見類型及應(yīng)用示例講解

    TypeScript常見類型及應(yīng)用示例講解

    這篇文章主要介紹了TypeScript常見類型及應(yīng)用示例講解,本章我們會講解?JavaScript?中最常見的一些類型,以及對應(yīng)的描述方式,有需要的朋友可以借鑒參考下
    2022-02-02
  • 微信小程序?qū)崿F(xiàn)上傳照片代碼實例解析

    微信小程序?qū)崿F(xiàn)上傳照片代碼實例解析

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)上傳照片代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-08-08
  • JS實現(xiàn)電子時鐘入門操作

    JS實現(xiàn)電子時鐘入門操作

    這篇文章主要為大家詳細介紹了JS實現(xiàn)電子時鐘入門操作,實現(xiàn)帶有表盤的時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 微信小程序?qū)崿F(xiàn)播放音頻

    微信小程序?qū)崿F(xiàn)播放音頻

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)播放音頻,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 第一次接觸JS require.js模塊化工具

    第一次接觸JS require.js模塊化工具

    第一次接觸JS require.js模塊化工具,本文為大家介紹了JS模塊化工具require.js教程第一課認識require.js,編寫require.js,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 小程序云開發(fā)之用戶注冊登錄

    小程序云開發(fā)之用戶注冊登錄

    這篇文章主要為大家詳細介紹了小程序云開發(fā)之用戶注冊登錄,帶云數(shù)據(jù)庫配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Javascript實現(xiàn)base64的加密解密方法示例

    Javascript實現(xiàn)base64的加密解密方法示例

    下文是base64用javascript寫出來的函數(shù)和方法。非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-06-06
  • JavaScript設(shè)計模式之性能優(yōu)化模式享元模式

    JavaScript設(shè)計模式之性能優(yōu)化模式享元模式

    這篇文章主要介紹了JavaScript設(shè)計模式之性能優(yōu)化模式享元模式,享元設(shè)計模式是用于性能優(yōu)化的模式,這種設(shè)計模式的核心在于可以共享技術(shù)并支持對大量細分過后的對象進行調(diào)整,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • JavaScript實現(xiàn)跟隨廣告的示例代碼

    JavaScript實現(xiàn)跟隨廣告的示例代碼

    浮動廣告是目前網(wǎng)站很常見的一種廣告形式,浮動廣告能實時跟隨用戶的瀏覽,有效的傳達產(chǎn)品要表達的意思,達到很好的傳播效果。本文使用JavaScript實現(xiàn)跟隨廣告的示例代碼,感興趣的可以了解一下
    2021-11-11
  • 性能優(yōu)化之代碼優(yōu)化頁面加載速度

    性能優(yōu)化之代碼優(yōu)化頁面加載速度

    本文主要介紹了代碼優(yōu)化頁面加載速度的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03

最新評論

界首市| 涞水县| 莒南县| 巨野县| 定西市| 安新县| 海门市| 巫溪县| 临泽县| 大同市| 新密市| 福州市| 宿松县| 哈尔滨市| 天水市| 泉州市| 太和县| 宿松县| 尚义县| 子长县| 施秉县| 文登市| 吉水县| 连云港市| 临安市| 镇雄县| 筠连县| 吴江市| 马关县| 南安市| 三穗县| 象山县| 东方市| 新竹市| 安丘市| 尖扎县| 容城县| 定南县| 常宁市| 芦山县| 禄丰县|