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

Javascript 賦值機(jī)制詳解

 更新時(shí)間:2014年11月23日 12:03:23   投稿:hebedich  
本文通過(guò)實(shí)例詳細(xì)介紹了javascript的賦值機(jī)制,是篇非常不錯(cuò)的文章,這里推薦給小伙伴們。

今天回答了一個(gè)關(guān)于 Javascript 的問(wèn)題,涉及到了賦值問(wèn)題,因此想把這個(gè)問(wèn)題好好總結(jié)下。

復(fù)制代碼 代碼如下:

var a = 'test';
var b = function() {};
b.a = 'test';
function change(m, n) {
    m = 'change';
    n.a = 'change';
}
change(a, b);

執(zhí)行上述代碼后,變量 a 和 b 的值會(huì)發(fā)生改變嗎?

原始值和引用值

在 之前的文章中介紹過(guò)原始值和引用值,原始值指的 Undefined, Null, Boolean, Number, String 等,它們存放在棧中,而引用值則集成自 Object,它被存放在堆中。
這里要把兩者區(qū)分清楚:

復(fù)制代碼 代碼如下:

var a = 'test';
var b = new String('test');
var A = 'true';
var B = new Boolean('true');

以上四個(gè)變量,a 和 A 為原始值,而 b 和 B 則為引用值。

賦值機(jī)制

清楚了原始值和引用值的區(qū)別后,就可以具體介紹 Javascript 的賦值機(jī)制:

在 Javascript 中,對(duì)于原始值類型的變量,每次賦值都將生成一份拷貝,而對(duì)于引用值,則正如其名,是通過(guò)引用賦值,指向同一個(gè)存儲(chǔ)對(duì)象的內(nèi)存處。
原始值的賦值:

復(fù)制代碼 代碼如下:

var a = 1;//原始值
var b = a;//生成一份拷貝給變量 b
b = 2;//與 a 無(wú)關(guān)
alert(a);//輸出 1

引用值的賦值:

復(fù)制代碼 代碼如下:

var A= new Object();//引用值
A.x = 1;
var B = A;//引用賦值,指向同一個(gè)內(nèi)存處
B.x = 2;//修改 B 將影響 A
alert(A.x);//輸出 2

參數(shù)傳遞

現(xiàn)在我們來(lái)看看傳遞兩種類型的值給函數(shù)形參時(shí)時(shí)怎么處理的。
1.傳遞原始值

復(fù)制代碼 代碼如下:

var a = 1;
function test(m) {
    m = 2;
}
test(a);
alert(a);//輸出 1

輸出為1,所以我們知道函數(shù)只是將變量的值傳遞進(jìn)去了,所以在函數(shù)體內(nèi)的 m 得到傳來(lái)的值1,再被賦值為2,這個(gè)過(guò)程不影響外部的變量 a。

2.傳遞引用值

復(fù)制代碼 代碼如下:

var A= new Object();
A.x = 1
function test(M) {
    M.x = 2;
}
test(A);
alert(A.x);//輸出 2

輸出為2,所以我們知道函數(shù)將變量的地址傳遞進(jìn)去了,所以函數(shù)體內(nèi)的 M 得到傳遞來(lái)的地址,因此屬性 x 被賦值為2的同時(shí)也會(huì)影響指向同一內(nèi)存地址的 A。

總結(jié)

現(xiàn)在再回到開(kāi)篇的問(wèn)題:

復(fù)制代碼 代碼如下:

var a = 'test';
var b = function() {};
b.a = 'test';
function change(m, n) {
    m = 'change';
    n.a = 'change';
}
change(a, b);

變量 a 為原始值,變量 b 為引用值,傳遞進(jìn)函數(shù)體內(nèi)一個(gè)為值,一個(gè)為地址,所以函數(shù)運(yùn)行后,變量 a 不會(huì)改變,而變量 b 的值將會(huì)改變。

相關(guān)文章

  • JavaScript strike方法入門實(shí)例(給字符串加上刪除線)

    JavaScript strike方法入門實(shí)例(給字符串加上刪除線)

    這篇文章主要介紹了JavaScript strike方法入門實(shí)例,strike方法用于給字符串加上刪除線,需要的朋友可以參考下
    2014-10-10
  • RGB和YUV 多媒體編程基礎(chǔ)詳細(xì)介紹

    RGB和YUV 多媒體編程基礎(chǔ)詳細(xì)介紹

    這篇文章主要介紹了 RGB和YUV 多媒體編程基礎(chǔ)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • javascript數(shù)組去重方法總結(jié)(推薦)

    javascript數(shù)組去重方法總結(jié)(推薦)

    這篇文章主要介紹了javascript數(shù)組去重方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JavaScript進(jìn)階教程(第三課)

    JavaScript進(jìn)階教程(第三課)

    JavaScript進(jìn)階教程(第三課)...
    2007-04-04
  • 你的 mixin 真的兼容 ECMAScript 5 嗎?

    你的 mixin 真的兼容 ECMAScript 5 嗎?

    本篇文章主要講述了,在JavaScript 中把一個(gè)對(duì)象的屬性或者方法 mixin 到另一個(gè)
    2013-04-04
  • javascript 基礎(chǔ)篇2 數(shù)據(jù)類型,語(yǔ)句,函數(shù)

    javascript 基礎(chǔ)篇2 數(shù)據(jù)類型,語(yǔ)句,函數(shù)

    文章里如果有錯(cuò)誤的話,希望能幫忙指正~我也是邊看視頻邊學(xué)習(xí)中,這個(gè)算是個(gè)筆記吧~自認(rèn)為總結(jié)出來(lái)的東西比看視頻要節(jié)省點(diǎn)時(shí)間~能幫到別人最好了~幫不到也起碼恩能幫到我自己
    2012-03-03
  • nodejs的require模塊(文件模塊/核心模塊)及路徑介紹

    nodejs的require模塊(文件模塊/核心模塊)及路徑介紹

    在nodejs中,模塊大概可以分為核心模塊和文件模塊,核心模塊是被編譯成二進(jìn)制代碼,引用的時(shí)候只需require表示符即可,文件模塊,則是指js文件、json文件或者是.node文件
    2013-01-01
  • JavaScript操作數(shù)組的常用方法總結(jié)

    JavaScript操作數(shù)組的常用方法總結(jié)

    這篇文章總結(jié)了JavaScript操作數(shù)組的常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 再探JavaScript作用域

    再探JavaScript作用域

    這篇文章主要介紹了再探JavaScript作用域,本文用簡(jiǎn)潔的語(yǔ)言和直觀的測(cè)試結(jié)果圖片給大家講解JavaScript的作用域,需要的朋友可以參考下
    2014-09-09
  • 詳解JavaScript的變量

    詳解JavaScript的變量

    這篇文章主要介紹了JavaScript變量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論