關於JavaScript中的傳值與傳引用的理解
1.傳值(by value)
變量的值被複製出一份,與原來的值將不相干,也就是説即使新的值被修改,原來的值也不會改變,在JavaScript中基本類型都是傳值的.
複製代碼 代碼如下:
function testPassValue()
{
var m=1;
var n=2;
//將m,n的值複製一份,傳遞到passValue
passValue(m,n);
alert(m); //將是原有的值
}
function passValue(a,b)
{
a = a+b; //改變a的值,這裏a只是原有值的一份copy
alert(a);
}
輸出結果:
3
1
2.傳引用(by reference).
引用本身複製一份傳給function,引用指向的對象並沒有被複制傳遞(java中也是如此),在function中,如果改變了對象的屬性的值,由於和原來的引用指向的是同一個對象,因此在通過原來的引用訪問到的將是修改過的值;
但是如果只是在function中將引用指向一個新的對象,將不會改變原對象的值,改變的只是複製的這一份引用.
複製代碼 代碼如下:
function testPassValue()
{
var date = new Date(2006,02,27);
alert(ate()); //輸出為 27
//將date引用本身複製一份,傳遞到passReference,注意date所指向的對象並沒有被複制
passReference(date);
alert(ate()); //輸出為12
//同上
changeReference(date);
alert(ate()); //輸出還為12
}
function passReference(da)
{
//由於da和原引用指向的是同一個對象,在function外,通過原有的引用訪問到的將是對象的'日期屬性值,將是修改之後的值.
ate(12);
}
function changeReference(da)
{
//此時da引用實際上是原引用的一份copy,將引用本身重新賦值,將不會影響原引用
da= new Date(2007,05,11);
//將da引用指向一個新的對象,此時原引用指向的還是原來的對象
alert(ate()); // 輸出為11
}
3 特殊的String
在JavaScript中,String也傳引用的. js中只有charAt方法,而沒有對應的修改方法,和java中的String相同,都具有不變性.
複製代碼 代碼如下:
var s1 = "hello";
var s2 = "hell" + "o";
if (s1 == s2)
alert("s1 = s2"); //這句會不會執行? java用的熟的人可能會認為不會執行(這句話我頗有微詞,java中也是會執行的!),因為java中的==比較的是同一性. 事實上在js中對String==比較的是值是否相等,所以這句話會執行. 但是對其他的Object == 比較和java中一樣是同一性.
-
Dreamweaver技巧詳解
Dreamweaver由MX版本開始使用Opera軟件公司的排版引擎“Presto”作為網頁預覽。下面給大家介紹Dreamweaver技巧,一起來學習吧!Dreamweaver技巧詳解1、靈活運用樣式熟悉網頁設計的網友就知道,調用Style的方法很多,我們可以單擊鼠標右鍵選擇CustonStyle來調用Style...
-
高級PHP開發工程師崗位職責7篇
現如今,很多地方都會使用到崗位職責,崗位職責具有提高內部競爭活力,更好地發現和使用人才的作用。想學習制定崗位職責卻不知道該請教誰?以下是小編整理的高級PHP開發工程師崗位職責,僅供參考,希望能夠幫助到大家。高級PHP開發工程師崗位職責1工作職責:1、承擔機器學習...
-
水星路由器設置wap
用户請根據自己的寬帶接入方式,按照上面介紹的方法,安裝你的水星(Mercury)MW153R路由器。以下是小編為大家整理分享的水星路由器設置wap,歡迎閲讀參考。水星路由器設置wap本文介紹了水星(Mercury)MW153R無線路由器的安裝、上網設置以及無線網絡(Wi-Fi)的設置;一台...
-
Dedecms中常用數據調用的sql語句
本文實例彙總了Dedecms中常用數據調用的'sql語句。分享給大家供大家參考。具體如下:{dede:sqlsql="selectcount(*)ascfromdede_archiveswherechannel=1"}共有文章:[field:c/]篇{/dede:sql}{dede:sqlsql="selectcount(*)ascfromdede_archiveswherechannel=2"}共...