第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

基本類(lèi)型和引用類(lèi)型是按照什么訪問(wèn)的?老師可以詳細(xì)說(shuō)說(shuō)嗎?

我在書(shū)上看,說(shuō)基本類(lèi)型是按值訪問(wèn)的,引用類(lèi)型類(lèi)型是按引用訪問(wèn)的,但是好像在某些操作的時(shí)候,引用類(lèi)型也是按值訪問(wèn)的。按值訪問(wèn)和按引用訪問(wèn)有什么區(qū)別嗎?

正在回答

6 回答

準(zhǔn)確的說(shuō),JavaScript是按共享傳遞的(call by sharing)。


對(duì)于基本類(lèi)型,按共享傳遞與按值傳遞(call by value)無(wú)異,你可以理解為JavaScript基本類(lèi)型是按值傳遞的。

例:

var?a?=?1;
function?foo(x)?{
????x?=?2;
}
foo(a);
console.log(a);?//?1,?未受x?=?2賦值所影響


而對(duì)于對(duì)象,較為特殊。我們可以修改對(duì)象中的屬性,而變量的值是對(duì)象的引用,例如:

var?obj?=?{x?:?1};
function?foo(o)?{
????o.x?=?3;
}
foo(obj);
console.log(obj.x);?//?3,?被修改了


但與按引用傳遞不同,修改形參o并不會(huì)影響obj.

var?obj?=?{x?:?1};
function?foo(o)?{
????o?=?100;
}
foo(obj);
console.log(obj.x);?//?1,?不會(huì)被o?=?100影響


為什么叫“按共享傳遞”呢?JavaScript的類(lèi)型中,基本類(lèi)型是不可變的(immutable),只有對(duì)象是可變的(mutable).

例如數(shù)字值100, 布爾值true, false,修改這些值并沒(méi)有什么意義。比較容易誤解的,是JavaScript中的string。但實(shí)際string值也是不可變的,例如:

var?str?=?"string";
str.substring(5);?//?"g"


在JavaScript中,任何看似對(duì)string值的"修改"操作,實(shí)際都是創(chuàng)建新的string值。

而對(duì)象就不一樣了,對(duì)象值是可變的。

var?obj?=?{x?:?1};
obj.x?=?100;
var?o?=?obj;
o.x?=?1;
obj.x;?//?1,?被修改
o?=?true;
obj.x;?//?1,?不會(huì)因o?=?true改變

例如這里定義變量obj,值是object,然后設(shè)置obj.x屬性為100。而后定義另一個(gè)變量,值仍然是這個(gè)object對(duì)象,此時(shí)obj和o兩個(gè)變量的值指向同一個(gè)對(duì)象(共享同一個(gè)對(duì)象的引用)。所以修改這個(gè)可變的對(duì)象,對(duì)obj和o都有影響,但修改obj變量的值(不再指向這個(gè)對(duì)象),不會(huì)影響到o。


所以這里既不是按值傳遞,也不是按引用傳遞。而是按共享傳遞。



參考資料:http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_value



5 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Alpaca 提問(wèn)者

謝謝老師!
2015-01-10 回復(fù) 有任何疑惑可以回復(fù)我~
#2

Alpaca 提問(wèn)者

簡(jiǎn)單說(shuō),就是修改對(duì)象屬性的值會(huì)產(chǎn)生影響,修改對(duì)象的值不會(huì)產(chǎn)生影響?
2015-01-10 回復(fù) 有任何疑惑可以回復(fù)我~
#3

Bosn 回復(fù) Alpaca 提問(wèn)者

雖然不太嚴(yán)謹(jǐn),但大概是這個(gè)意思。對(duì)于五種基本類(lèi)型,和call by value(按值傳遞)是一樣的,對(duì)于對(duì)象,函數(shù)傳入的參數(shù)變量不會(huì)受形參值的變化所影響,但如果值是對(duì)象,修改對(duì)象的內(nèi)容(如修改對(duì)象屬性、調(diào)用方法)會(huì)影響到傳入的參數(shù)。因?yàn)閭魅氲膮?shù)和形參“共享”同一個(gè)對(duì)象。
2015-01-11 回復(fù) 有任何疑惑可以回復(fù)我~

更新下博文的地址:http://bosn.me/js/js-call-by-sharing/

0 回復(fù) 有任何疑惑可以回復(fù)我~

整理了一篇更詳細(xì)的文章:http://bosn.me/articles/js-call-by-sharing/

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Alpaca 提問(wèn)者

老師好認(rèn)真!謝謝
2015-01-29 回復(fù) 有任何疑惑可以回復(fù)我~

http://dmitrysoshnikov.com/ecmascript/chapter-8-evaluation-strategy/

0 回復(fù) 有任何疑惑可以回復(fù)我~
var?obj?=?{x?:?1};
obj.x?=?100;
var?o?=?obj;
o.x?=?1;
obj.x;?//?1,?被修改
o?=?true;?//o放棄和obj共享x?:?1},去擁有true這個(gè)對(duì)象?typeof(o)?boolean


0 回復(fù) 有任何疑惑可以回復(fù)我~

回答的真好!

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

基本類(lèi)型和引用類(lèi)型是按照什么訪問(wèn)的?老師可以詳細(xì)說(shuō)說(shuō)嗎?

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)