JavaScript傳遞變量: 值傳遞?引用傳遞?
更新時(shí)間:2011年02月22日 21:19:38 作者:
JavaScript傳遞變量 值傳遞 引用傳遞,需要的朋友可以參考下。
當(dāng)變量A賦值給變量B時(shí),會(huì)將棧中的值復(fù)制一份到為新變量分配的空間中。
如何理解?
var x = y = 1;
y = 2;
alert(x);
x的值為多少?
var obj = {};
var sub = {};
sub['id'] = 3;
obj['sub'] = sub;
sub['id'] = 4;
alert(obj['sub']['id']);
obj['sub']['id']的值又為多少?他們真的符合你的預(yù)期嗎?
我們分別運(yùn)行2段代碼,發(fā)現(xiàn)第1段程序中x的值沒(méi)有改變,而第2段程序中的obj['sub']['id']的值卻改變了。同樣是一個(gè)賦值操作,同樣是修改另外一份拷貝的值,為什么一段程序源變量沒(méi)變,一段程序源變量變化了呢?這個(gè)傳遞到底是按值傳遞還是按引用傳遞的呢?
李松峰翻譯的《JavaScript 高級(jí)程序設(shè)計(jì) 第二版》中給出了答案。
在開始的這2個(gè)例子中,事實(shí)上都復(fù)制了A的值給B,不同的是,在第一個(gè)例子中,A的值是int型的1,而在第二個(gè)例子中,A的值是一個(gè)地址指針,這個(gè)地址指針可以訪問(wèn)到一個(gè)對(duì)象,復(fù)制之后,第1個(gè)例子中的B的值變成了新的int, 他的值為1,而第2個(gè)例子中B的值變成了新的地址指針,他的值為這個(gè)對(duì)象的地址。
下面的例子可以幫助理解
function setName(obj){
obj.name = "test1";
obj = {};
obj.name = "test2";
}
var person = new Object();
setName(person);
alert(person.name);
可以看到的是,盡管調(diào)用了setName函數(shù)修改了變量的name屬性,但是person.name的值并沒(méi)有改變。這是因?yàn)樵诤瘮?shù)中,obj指向的地址被改變了,因此修改這個(gè)地址的name屬性,并不會(huì)對(duì)原地址的name屬性造成影響。從另一個(gè)方面,也印證了JavaScript的傳遞是按值傳遞。
如何理解?
復(fù)制代碼 代碼如下:
var x = y = 1;
y = 2;
alert(x);
x的值為多少?
復(fù)制代碼 代碼如下:
var obj = {};
var sub = {};
sub['id'] = 3;
obj['sub'] = sub;
sub['id'] = 4;
alert(obj['sub']['id']);
obj['sub']['id']的值又為多少?他們真的符合你的預(yù)期嗎?
我們分別運(yùn)行2段代碼,發(fā)現(xiàn)第1段程序中x的值沒(méi)有改變,而第2段程序中的obj['sub']['id']的值卻改變了。同樣是一個(gè)賦值操作,同樣是修改另外一份拷貝的值,為什么一段程序源變量沒(méi)變,一段程序源變量變化了呢?這個(gè)傳遞到底是按值傳遞還是按引用傳遞的呢?
李松峰翻譯的《JavaScript 高級(jí)程序設(shè)計(jì) 第二版》中給出了答案。
在開始的這2個(gè)例子中,事實(shí)上都復(fù)制了A的值給B,不同的是,在第一個(gè)例子中,A的值是int型的1,而在第二個(gè)例子中,A的值是一個(gè)地址指針,這個(gè)地址指針可以訪問(wèn)到一個(gè)對(duì)象,復(fù)制之后,第1個(gè)例子中的B的值變成了新的int, 他的值為1,而第2個(gè)例子中B的值變成了新的地址指針,他的值為這個(gè)對(duì)象的地址。
下面的例子可以幫助理解
復(fù)制代碼 代碼如下:
function setName(obj){
obj.name = "test1";
obj = {};
obj.name = "test2";
}
var person = new Object();
setName(person);
alert(person.name);
可以看到的是,盡管調(diào)用了setName函數(shù)修改了變量的name屬性,但是person.name的值并沒(méi)有改變。這是因?yàn)樵诤瘮?shù)中,obj指向的地址被改變了,因此修改這個(gè)地址的name屬性,并不會(huì)對(duì)原地址的name屬性造成影響。從另一個(gè)方面,也印證了JavaScript的傳遞是按值傳遞。
相關(guān)文章
antd?table長(zhǎng)表格出現(xiàn)滾動(dòng)條的操作方法
這篇文章主要介紹了antd?table長(zhǎng)表格如何出現(xiàn)滾動(dòng)條,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
js截取video視頻某一幀做封面的簡(jiǎn)單案例(附完整代碼)
最近碰到一個(gè)需求,要求獲取video視頻某一幀做封面圖片,這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于js截取video視頻某一幀做封面的簡(jiǎn)單案例,需要的朋友可以參考下2024-04-04
javascript實(shí)現(xiàn)支持移動(dòng)設(shè)備畫廊
本文通過(guò)純javascript技術(shù)實(shí)現(xiàn)支持移動(dòng)設(shè)備畫廊,支持移動(dòng)設(shè)備手勢(shì)操作,感興趣的朋友一起來(lái)學(xué)習(xí)吧2015-08-08
js?html5獲取input焦點(diǎn)的輸入框并賦值實(shí)例
這篇文章主要為大家介紹了js?html5獲取input焦點(diǎn)的輸入框并賦值實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
將Datatable轉(zhuǎn)化成json發(fā)送前臺(tái)實(shí)現(xiàn)思路
將Datatable轉(zhuǎn)化成json可以將dt序列化成json,放到前臺(tái)的隱藏控件hidBoundary中,具體的實(shí)現(xiàn)如下,有類似需求的朋有可以參考下2013-09-09

