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的值沒有改變,而第2段程序中的obj['sub']['id']的值卻改變了。同樣是一個(gè)賦值操作,同樣是修改另外一份拷貝的值,為什么一段程序源變量沒變,一段程序源變量變化了呢?這個(gè)傳遞到底是按值傳遞還是按引用傳遞的呢?
李松峰翻譯的《JavaScript 高級(jí)程序設(shè)計(jì) 第二版》中給出了答案。
在開始的這2個(gè)例子中,事實(shí)上都復(fù)制了A的值給B,不同的是,在第一個(gè)例子中,A的值是int型的1,而在第二個(gè)例子中,A的值是一個(gè)地址指針,這個(gè)地址指針可以訪問到一個(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的值并沒有改變。這是因?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的值沒有改變,而第2段程序中的obj['sub']['id']的值卻改變了。同樣是一個(gè)賦值操作,同樣是修改另外一份拷貝的值,為什么一段程序源變量沒變,一段程序源變量變化了呢?這個(gè)傳遞到底是按值傳遞還是按引用傳遞的呢?
李松峰翻譯的《JavaScript 高級(jí)程序設(shè)計(jì) 第二版》中給出了答案。
在開始的這2個(gè)例子中,事實(shí)上都復(fù)制了A的值給B,不同的是,在第一個(gè)例子中,A的值是int型的1,而在第二個(gè)例子中,A的值是一個(gè)地址指針,這個(gè)地址指針可以訪問到一個(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的值并沒有改變。這是因?yàn)樵诤瘮?shù)中,obj指向的地址被改變了,因此修改這個(gè)地址的name屬性,并不會(huì)對(duì)原地址的name屬性造成影響。從另一個(gè)方面,也印證了JavaScript的傳遞是按值傳遞。
相關(guān)文章
JavaScript設(shè)計(jì)模式之職責(zé)鏈模式
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之職責(zé)鏈模式,對(duì)設(shè)計(jì)模式感興趣的同學(xué),可以參考下2021-04-04uniapp頁面?zhèn)鲄⒌娜N方式實(shí)例總結(jié)
在進(jìn)行頁面的跳轉(zhuǎn)的時(shí)候,往往需要我們將一些參數(shù)攜帶著傳遞過去這里的class樣式,下面這篇文章主要給大家介紹了關(guān)于uniapp頁面?zhèn)鲄⒌娜N方式,需要的朋友可以參考下2022-11-11onclick與listeners的執(zhí)行先后問題詳細(xì)解剖
javascript中onclick與listeners的執(zhí)行先后問題一直都是大家所疑惑的地方,接下來將為大家解決此疑惑,感興趣的朋友可以了解下哦2013-01-01uniapp實(shí)現(xiàn)地圖點(diǎn)聚合功能的詳細(xì)教程
最近公司項(xiàng)目需求需要對(duì)設(shè)備在地圖上面進(jìn)行監(jiān)控,并在當(dāng)設(shè)備一定距離時(shí)進(jìn)行聚合,這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)地圖點(diǎn)聚合功能的相關(guān)資料,需要的朋友可以參考下2022-12-12原生js操作checkbox用document.getElementById實(shí)現(xiàn)
js操作checkbox本人建議用document.getElementById(checkbox_id).checked不推薦使用jquery操作checkbox,感興趣的朋友不要錯(cuò)過2013-10-10