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

JavaScript中參數(shù)傳遞方式詳解

 更新時間:2023年09月12日 14:28:54   作者:十里八鄉(xiāng)有名的后俊生  
這篇文章主要為大家詳細(xì)介紹了JavaScript中參數(shù)傳遞三種方式:按值傳遞、引用傳遞和共享傳遞,文中的示例代碼講解詳細(xì),感興趣的可以了解下

在JavaScript中,參數(shù)的數(shù)據(jù)傳遞方式一般是按值傳遞、引用傳遞,今天遇到有人問如下這個問題

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

問為什么obj的值沒有改變,按照引用傳遞的方式,最后一行打印的值不是2,而是{ value: 1 },

一開始給我也問懵了。確實,最近寫iOS代碼比較多,按照OC語言的邏輯,如果原先存在一個引用型數(shù)據(jù)類型A,給這個A賦值引用數(shù)據(jù)類型B,那么就會A等于B,A和B的內(nèi)存地址是同一塊,原先的A就不存在了。如果按照這個邏輯,確實應(yīng)該打印2,但是!這是JS,不是OC,反應(yīng)了片刻,和他簡單介紹了JS參數(shù)傳遞的幾種方式:

按值傳遞

這個是最基本的傳遞方式,最符合直觀認(rèn)知的。大家看一下代碼就會明白,即使不會JS會、沒啥編程經(jīng)驗的人也能理解。

function add(param){
  param+=10;
  console.log(param);//11
}
const num = 1;
add(num);
console.log(num);//1

這里,參數(shù)param的改變對于num是沒有任何影響的,因為這里是num的值復(fù)制給了函數(shù)add內(nèi)部的局部變量param,所以在函數(shù)內(nèi)部改變param的值并不會影響外部num的值。

引用類型

紅寶書中這么介紹引用類型的:

ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。這意味著函數(shù)外的值會被復(fù)制到函數(shù)內(nèi)部的參數(shù) 中,就像從一個變量復(fù)制到另一個變量一樣。如果是原始值,那么就跟原始值變量的復(fù)制一樣,如果是 引用值,那么就跟引用值變量的復(fù)制一樣。

話不多說,上代碼:

const value = {
  value: 1
};
function fun(o) {
  o.value = 2;
  console.log(o.value);//2
  console.log(o);//{value: 2}
}
fun(value);
console.log(value);//{value: 2}
console.log(value.value);//2

函數(shù)內(nèi)部對形參的操作影響到了外部實參,這里就是引用類型。hba

共享類型

那什么是共享類型呢?

說實話我暫時沒在紅寶書中找到這種說話,但是'坊間'一直流傳著共享類型的傳說。

還是剛剛那段代碼:

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

簡單來說就是:對于傳遞到函數(shù)參數(shù)的對象類型,如果直接改變了拷貝的引用的指向地址,那是不會影響到原來的那個對象;如果是通過拷貝的引用,去進(jìn)行內(nèi)部的值的操作,那么就會改變到原來的對象的。

意味著,這段代碼的執(zhí)行關(guān)鍵就在 o = 2;將原先存放參數(shù)o的內(nèi)存地址,存放了2(這里可能對于地址更換的細(xì)節(jié)有出入,但是不影響理解),也就是原先的參數(shù)o和obj沒有任何關(guān)系了,轉(zhuǎn)而存放了2這個值,賦值操作導(dǎo)致標(biāo)識符發(fā)生了重新綁定Rebinding,重新復(fù)制的標(biāo)識符會指向新的內(nèi)存空間。

到此這篇關(guān)于JavaScript中參數(shù)傳遞方式詳解的文章就介紹到這了,更多相關(guān)javascript參數(shù)傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Web 開發(fā)中Ajax的Session 超時處理方法

    Web 開發(fā)中Ajax的Session 超時處理方法

    下面小編就為大家?guī)硪黄猈eb 開發(fā)中Ajax的Session 超時處理方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • JavaScript學(xué)習(xí)點滴 call、apply的區(qū)別

    JavaScript學(xué)習(xí)點滴 call、apply的區(qū)別

    對于apply和call兩者在作用上是相同的,但兩者在參數(shù)上有區(qū)別的。
    2010-10-10
  • JS實現(xiàn)的簡單分頁功能示例

    JS實現(xiàn)的簡單分頁功能示例

    這篇文章主要介紹了JS實現(xiàn)的簡單分頁功能,涉及javascript事件響應(yīng)及頁面元素遍歷、動態(tài)構(gòu)造等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • postMessage的兩種使用方式

    postMessage的兩種使用方式

    這篇文章主要介紹了使用postMessage實現(xiàn)iframe跨域通信,第一種使用postMessage在irfame中實現(xiàn)跨域數(shù)據(jù)傳遞,第二種使用postMessage在window.open()中的使用,本文結(jié)合示例代碼給大家詳細(xì)講解,需要的朋友跟隨小編一起看看吧
    2022-03-03
  • iscroll.js滾動加載實例詳解

    iscroll.js滾動加載實例詳解

    這篇文章主要為大家詳細(xì)介紹了iscroll.js滾動加載實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • javascript工廠模式和構(gòu)造函數(shù)模式創(chuàng)建對象方法解析

    javascript工廠模式和構(gòu)造函數(shù)模式創(chuàng)建對象方法解析

    本文主要對javascript工廠模式和構(gòu)造函數(shù)模式創(chuàng)建對象方法進(jìn)行解析,具有一定的參考價值,下面跟著小編一起來看下吧
    2016-12-12
  • 教你使用javascript簡單寫一個頁面模板引擎

    教你使用javascript簡單寫一個頁面模板引擎

    不知道你有木有聽說過一個基于Javascript的Web頁面預(yù)處理器,叫做AbsurdJS。只是打算寫一個CSS的預(yù)處理器,后來擴展到了CSS和HTML,可以用來把Javascript代碼轉(zhuǎn)成CSS和HTML代碼。當(dāng)然,由于可以生成HTML代碼,你也可以把它當(dāng)成一個模板引擎,用于在標(biāo)記語言中填充數(shù)據(jù)。
    2015-05-05
  • 在webstorm中配置less的方法詳解

    在webstorm中配置less的方法詳解

    這篇文章主要介紹了在webstorm中配置less的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09
  • JavaScript Math對象和調(diào)試程序的方法分析

    JavaScript Math對象和調(diào)試程序的方法分析

    這篇文章主要介紹了JavaScript Math對象和調(diào)試程序的方法,結(jié)合實例形式分析了javascript中Math對象生成隨機數(shù)以及使用alert()、console.log()函數(shù)進(jìn)行錯誤調(diào)試相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • 微信小程序數(shù)據(jù)分析之自定義分析的實現(xiàn)

    微信小程序數(shù)據(jù)分析之自定義分析的實現(xiàn)

    這篇文章主要介紹了微信小程序數(shù)據(jù)分析之自定義分析的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論

大埔区| 博爱县| 广汉市| 内黄县| 垦利县| 咸宁市| 山阴县| 拜泉县| 泰来县| 翼城县| 阿勒泰市| 乌鲁木齐县| 盐源县| 阜平县| 沈阳市| 大同县| 曲水县| 孝昌县| 海林市| 汽车| 额济纳旗| 华蓥市| 金山区| 宽城| 濉溪县| 乐安县| 克拉玛依市| 抚州市| 青铜峡市| 上栗县| 涿州市| 罗源县| 清镇市| 秀山| 上饶市| 富源县| 枣阳市| 奇台县| 耿马| 界首市| 济南市|