欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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 },

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

按值傳遞

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

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

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

引用類型

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

ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。這意味著函數(shù)外的值會(huì)被復(fù)制到函數(shù)內(nèi)部的參數(shù) 中,就像從一個(gè)變量復(fù)制到另一個(gè)變量一樣。如果是原始值,那么就跟原始值變量的復(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)部對(duì)形參的操作影響到了外部實(shí)參,這里就是引用類型。hba

共享類型

那什么是共享類型呢?

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

還是剛剛那段代碼:

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 }

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

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

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

相關(guān)文章

  • 深入探究JavaScript的類型判斷(從基礎(chǔ)到精通)

    深入探究JavaScript的類型判斷(從基礎(chǔ)到精通)

    JavaScript 語言具有多種數(shù)據(jù)類型,它們可以大致分為兩大類:基本數(shù)據(jù)類型(Primitive Data Types)和引用數(shù)據(jù)類型(Reference Data Types),本文將帶大家一起從基礎(chǔ)到精通深入探究JavaScript的類型判斷,需要的朋友可以參考下
    2024-05-05
  • 微信小程序?qū)崿F(xiàn)IP歸屬地獲取功能

    微信小程序?qū)崿F(xiàn)IP歸屬地獲取功能

    在日常開發(fā)中,后端主要提供數(shù)據(jù)以及處理業(yè)務(wù)邏輯,前端主要提供頁面布局以及數(shù)據(jù)展示。本文主要介紹如何實(shí)現(xiàn)一個(gè)簡單獲取IP歸屬地的小程序,感興趣的可以了解一下
    2022-09-09
  • 淺析Echarts圖表渲染導(dǎo)致內(nèi)存泄漏的原因及解決方案

    淺析Echarts圖表渲染導(dǎo)致內(nèi)存泄漏的原因及解決方案

    在今年某個(gè)可視化大屏項(xiàng)目中,出現(xiàn)了一個(gè)問題,項(xiàng)目在運(yùn)行一段時(shí)間后,頁面出現(xiàn)了崩潰,而且是大概運(yùn)行幾天之后,因?yàn)榇笃另?xiàng)目是部署到客戶現(xiàn)場(chǎng)大屏,長時(shí)間運(yùn)行不關(guān)閉,小編認(rèn)為 Echarts 圖表渲染導(dǎo)致了內(nèi)存泄漏,本文將深入分析這一問題,并提供解決方案
    2023-10-10
  • JavaScript中MD5加密方法與實(shí)踐

    JavaScript中MD5加密方法與實(shí)踐

    MD5是一種常用的哈希算法,用于將信息映射為固定長度的摘要值,在JavaScript中,MD5加密常用于數(shù)據(jù)驗(yàn)證、密碼存儲(chǔ)和防止數(shù)據(jù)篡改,文章詳細(xì)解釋了MD5在JavaScript中的應(yīng)用,包括使用示例、應(yīng)用場(chǎng)景以及安全性考慮,需要的朋友可以參考下
    2025-03-03
  • 被遺忘的javascript的slice() 方法

    被遺忘的javascript的slice() 方法

    javascript數(shù)組對(duì)象的slice方法從數(shù)組中分離出一個(gè)子數(shù)組,功能類似于字符串對(duì)象的substring方法。今天我們就來詳細(xì)探討下javascript的這個(gè)不太常用的slice()方法。
    2015-04-04
  • JS實(shí)現(xiàn)slide文字框縮放伸展效果代碼

    JS實(shí)現(xiàn)slide文字框縮放伸展效果代碼

    這篇文章主要介紹了JS實(shí)現(xiàn)slide文字框縮放伸展效果代碼,涉及JavaScript響應(yīng)鼠標(biāo)事件動(dòng)態(tài)操作頁面元素屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • typescript返回值類型和參數(shù)類型的具體使用

    typescript返回值類型和參數(shù)類型的具體使用

    本文主要介紹了typescript返回值類型和參數(shù)類型的具體使用文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 擴(kuò)展JavaScript功能的正確方法(譯文)

    擴(kuò)展JavaScript功能的正確方法(譯文)

    JavaScript已經(jīng)內(nèi)置了很多強(qiáng)大的方法,但有時(shí)你需要的某個(gè)功能在內(nèi)置的方法中沒有,我們?cè)趺磥韮?yōu)雅地?cái)U(kuò)展JavaScript功能呢
    2012-04-04
  • js限制文本框的輸入內(nèi)容代碼分享(3類)

    js限制文本框的輸入內(nèi)容代碼分享(3類)

    這篇文章主要介紹了3類js限制文本框的輸入內(nèi)容代碼,需要的朋友可以參考下
    2015-08-08
  • JS實(shí)現(xiàn)判斷有效的數(shù)獨(dú)算法示例

    JS實(shí)現(xiàn)判斷有效的數(shù)獨(dú)算法示例

    這篇文章主要介紹了JS實(shí)現(xiàn)判斷有效的數(shù)獨(dú)算法,結(jié)合實(shí)例形式分析了javascript數(shù)獨(dú)判斷的原理及相關(guān)算法實(shí)現(xiàn)、使用操作技巧,需要的朋友可以參考下
    2019-02-02

最新評(píng)論