日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JavaScript按值傳遞-創(chuàng)新互聯(lián)

這篇文章主要為大家詳細(xì)介紹了JavaScript按值傳遞的方法,文中示例代碼介紹的非常詳細(xì),零基礎(chǔ)也能參考此文章,感興趣的小伙伴們可以參考一下。

松山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
概述

參數(shù)的傳遞分為按值傳遞和按引用傳遞,而 JavaScript 中參數(shù)的傳遞只有按值傳遞。

ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。

所謂按值傳遞就是:

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

我們知道 JS 中,既有基本數(shù)據(jù)類型又有引用數(shù)據(jù)類型,那么二者的按值傳遞有什么樣的區(qū)別呢?

先給結(jié)論

在向參數(shù)傳遞基本數(shù)據(jù)類型時(shí),被傳遞的值會(huì)被復(fù)制給一個(gè)局部變量(arguments 類數(shù)組對(duì)象中的一個(gè)元素)。在向參數(shù)傳遞引用數(shù)據(jù)類型時(shí),會(huì)把這個(gè)值的內(nèi)存地址賦給一個(gè)局部變量。

一、數(shù)據(jù)類型

在 JS 中,數(shù)據(jù)類型分為基本類型和引用類型。

其中基本類型包括:number, string, boolean, undefined, null, Symbol(es 6 新增)?;绢愋偷闹凳潜4嬖跅?nèi)存當(dāng)中的。

基本數(shù)據(jù)類型的值本身是不會(huì)改變的。

let num1 = 5;
let num2 = num1;

JavaScript按值傳遞

將保存著原始值的變量 num1 賦值給 num2 后,會(huì)將原始值 num1 的副本賦值給新變量 num2, 此后這兩個(gè)變量是完全獨(dú)立的,他們只是擁有相同的值而已,是完全獨(dú)立的拷貝,互不干涉。

引用數(shù)據(jù)類型包括:Function, Array, Object 等等除了基本數(shù)據(jù)類型之外的數(shù)據(jù)。引用數(shù)據(jù)類型是保存在堆內(nèi)存當(dāng)中的。

JS 不允許直接操作對(duì)象的內(nèi)存空間,所以引用數(shù)據(jù)類型是通過(guò)存儲(chǔ)在變量處的值,也就是一個(gè)指針(point),指向存儲(chǔ)對(duì)象的內(nèi)存地址,從而進(jìn)行訪問的。

let obj1 = new Object();
var obj2 = obj1;

JavaScript按值傳遞

當(dāng)把引用類型的變量 obj1 賦給另一個(gè)變量 obj2 后,obj2 接受的其實(shí)是引用類型數(shù)據(jù)的內(nèi)存地址指針。所以,判斷兩個(gè)引用類型是否相等,其實(shí)比較的是內(nèi)存地址是否相等。

二、按值傳遞
var num = 1;
function foo(param) {
    param = 2;
}
foo(num);
console.log(num); // num 值仍為1, 并沒有受 param = 2 賦值影響

以上代碼:

按值傳遞每次傳遞參數(shù)時(shí),都會(huì)拷貝一份副本到函數(shù)內(nèi)部,拷貝前后的兩個(gè)值互不影響。

二、“按引用傳遞”
var obj = {
    num: 1
};

function foo(o) {
    o.num = 2;
    console.log(obj.num);  // 2
}

foo(obj);
console.log(obj.num); // 2

以上代碼,foo 函數(shù)把 obj 對(duì)象作為實(shí)參,執(zhí)行完畢后把 obj 對(duì)象的 num 屬性給改變了,說(shuō)明參數(shù) o 對(duì)象 和 外部變量 obj 對(duì)象是同一個(gè)對(duì)象。說(shuō)好的按值傳遞呢,怎么還是把原來(lái)的對(duì)象給改變了呢。

三、按共享傳遞

再看下面這段代碼:

var obj = {
    num: 1
};

function foo(o) {
    o = 100;
}

foo(obj);
console.log(obj.num);  // 1

如果是按引用傳遞的話,按理來(lái)說(shuō) obj 對(duì)象會(huì)被改變會(huì) 100 才對(duì)。

準(zhǔn)確的說(shuō),JS中的基本類型按值傳遞,對(duì)象類型按共享傳遞的(call by sharing,也叫按對(duì)象傳遞、按對(duì)象共享傳遞)

在共享傳遞中對(duì)函數(shù)形參的賦值,不會(huì)影響實(shí)參本身的值。

所以,形參引用的對(duì)象是同一個(gè),由于對(duì)象是可變的(mutable),修改形參中對(duì)象的屬性值,會(huì)影響到原本對(duì)象的屬性值。

按引用傳遞是傳遞對(duì)象的引用,而按共享傳遞是傳遞對(duì)象的拷貝的副本,所以副本本身無(wú)法直接修改。而拷貝副本也是一種拷貝,所以也被認(rèn)為是按值傳遞。

基本類型本身是按值傳遞,具有不可變性(immutable),對(duì)基本類型的修改,實(shí)質(zhì)上都是在棧內(nèi)存中創(chuàng)建了新的值。

復(fù)習(xí)鞏固:

var obj = { num : 0 };
obj.num = 100;
var o = obj;
o.num = 1;
obj.num; // 1, 被修改
o = true;
obj.num; // 1,  o 是對(duì)象的一個(gè)拷貝,對(duì) o 本身的修改,不會(huì)改變 obj 對(duì)象本身的值。
總結(jié)

JavaScript 中參數(shù)的傳遞只有按值傳遞,而對(duì)于引用類型的傳遞,是一種共享傳遞,傳遞的是數(shù)據(jù)類型的拷貝副本,雖然引用的是同一個(gè)對(duì)象,但是無(wú)法通過(guò)改變形參來(lái)改變實(shí)參本身。

以上就是JavaScript按值傳遞的方法,代碼示例簡(jiǎn)單明了,如果在日常工作遇到此問題。通過(guò)這篇文章,希望你能有所收獲,更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享標(biāo)題:JavaScript按值傳遞-創(chuàng)新互聯(lián)
文章來(lái)源:http://www.dlmjj.cn/article/dohjss.html