最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript引用指針使用介紹

 更新時間:2012年11月07日 10:32:13   作者:  
Javascript引用指針使用介紹,需要的朋友可以參考下
請嘗試完成下列完形填空:
復(fù)制代碼 代碼如下:

/* 創(chuàng)建一個隊列,頭為head0,尾為tail0 */
function IntList(head0, tail0){
this.head = head0 || 0;
this.tail = tail0 || null;
}
/* 返回一個IntList包含數(shù)組中的所有數(shù) */
IntList.list = function(__args){
var sentinel = new IntList(),
len = __args.length,

p = sentinel;
for(var i = 0; i < len; i++){
p.tail = new IntList(__args[i]);
p = p.tail;
}
return sentinel.tail;
};
/* 返回該對象的字符串表示 */
IntList.prototype.toString = function(){
var temp = "";
temp += "[";
for(var L = this; L !== null; L = L.tail){
temp = temp + " " + L.head;
}
temp += " ]";
return temp;
};

/** 返回一個IntList,包含IntList A和IntList B,
* 其中B的元素在A的后面。不能使用new關(guān)鍵字。
*/
function dcatenate(A, B){
/* 完成功能 */
}

/** 返回一個新的IntList,其長度為len,
* 以#start元素為開頭(其中#0是第一個元素),
* 不能改變L。
*/
function sublist(L, start, len){
/* 完成功能 */
}

這是一個用Javascript寫的鏈表題。由于鏈表擁有較為復(fù)雜的引用操作,正好可以用來考察下對Javascript的引用的理解。附帶簡單的測試用例:
復(fù)制代碼 代碼如下:

/* 測試dcatenate和sublist函數(shù)是否正確 */
function test(){
var A = IntList.list([4,6,7,3,8]),
B = IntList.list([3,2,5,9]);
dcatenate(A, B);
if(A.toString() === "[ 4 6 7 3 8 3 2 5 9 ]"){
alert("dcatenate函數(shù)正確。");
}else{
alert("dcatenate函數(shù)錯誤。");
}
var L = IntList.list([3,4,5,2,6,8,1,9]),
result = sublist(L, 3, 3);
if(result.toString() === "[ 2 6 8 ]"){
alert("sublist函數(shù)正確。");
}else{
alert("sublist函數(shù)正確。");
}
}

Javascript引用?

實際上,在對變量賦予引用類型實例時,變量保存的是該實例的引用:

  var temp = new Object();

這種表現(xiàn)非常切合它的名字,引用類型,其實例當(dāng)然是來引用的。

而當(dāng)將該變量再付給另一個變量的時候,實際上只是進行了對引用的復(fù)制操作:

  var temp2 = temp;

所以雖然從定義式來看:temp2 = temp,但他們并沒有直接聯(lián)系,例如修改了temp的引用:

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

var temp = {
name: "temp"
};
var temp2 = temp;
temp = {
name: "not temp2"
};
temp === temp2; //false

當(dāng)然,如果我們修改的只是指針指向的實例本身,那么temp2依然等于temp:
復(fù)制代碼 代碼如下:

var temp = {
name: "temp"
};
var temp2 = temp;
temp.name = "also temp2";
temp === temp2; //true

IntList是什么東東?

我們來分析一下下圖:

    創(chuàng)建兩個空的變量,所以右圖中L和Q是空的。創(chuàng)建一個新的IntList其頭部為3,尾部為空,將L引用的值賦給Q,所以L和Q都指向這個新的IntList。Q指向一個新創(chuàng)建的IntList其頭部為42,尾部為空,將Q的指針賦給L.tail,這樣兩個IntList被套嵌起來。

可見IntList是個通過指針達(dá)到多重套嵌的數(shù)據(jù)結(jié)構(gòu),被稱為鏈表(Linked List)。

1.創(chuàng)建兩個空的變量,所以右圖中L和Q是空的。
2.創(chuàng)建一個新的IntList其頭部為3,尾部為空,將L引用的值賦給Q,所以L和Q都指向這個新的IntList。
3.Q指向一個新創(chuàng)建的IntList其頭部為42,尾部為空,將Q的指針賦給L.tail,這樣兩個IntList被套嵌起來。
可見IntList是個通過指針達(dá)到多重套嵌的數(shù)據(jù)結(jié)構(gòu),被稱為鏈表(Linked List)。

IntList合并

我們只需要將其中一個的尾部指向另一個就行了。這樣這兩個IntList就連接起來了:

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

/** 返回一個IntList,包含IntList A和IntList B,
* 其中B的元素在A的后面。不能使用new關(guān)鍵字。
*/
function dcatenate(A, B){
var p;
for(p = A; p != null; p = p.tail){
if(p.tail === null){
p.tail = B;
break;
}
}
return A
}

IntList截取
由于題目要求不能改變原IntList,所以我們只能從原IntList取出數(shù)據(jù)再重建一個新的數(shù)據(jù)。
復(fù)制代碼 代碼如下:

/** 返回一個新的IntList,其長度為len,
* 以#start元素為開頭(其中#0是第一個元素),
* 不能改變L。
*/
function sublist(L, start, len){
var K,
P,
J;
var i = 0,
end = start + len;
for(P = L; i <= end; P = P.tail, i++){
if(i < start){
continue;
}else if(i === start){
K = new IntList(P.head);
J = K;
}else if(i > start && i < end){
J.tail = new IntList(P.head);
J = J.tail;
}else if(i >= end){
break;
}
}
return K;
}

思考題
1.函數(shù)傳參數(shù)的時候是怎么傳的?例如下面代碼的引用過程是怎樣的?
復(fù)制代碼 代碼如下:

var obj = {
name: "anything"
};
function getName(__obj){
return __obj.name;
}
var name = getName(obj);

相關(guān)文章

  • js換圖片效果可進行定時操作

    js換圖片效果可進行定時操作

    換圖片效果想必大家都有見到過吧,但是定時換圖片,貌似就很少見了,下面本文通過一個示例為大家詳細(xì)介紹下
    2014-06-06
  • 如何在 JavaScript 中更好地利用數(shù)組

    如何在 JavaScript 中更好地利用數(shù)組

    這篇文章主要介紹了如何在 JavaScript 中更好地使用數(shù)組,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • 微信小程序搜索功能(附:小程序前端+PHP后端)

    微信小程序搜索功能(附:小程序前端+PHP后端)

    這篇文章主要介紹了微信小程序搜索功能(附:小程序前端+PHP后端),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Bootstrap實現(xiàn)的標(biāo)簽頁內(nèi)容切換顯示效果示例

    Bootstrap實現(xiàn)的標(biāo)簽頁內(nèi)容切換顯示效果示例

    這篇文章主要介紹了Bootstrap實現(xiàn)的標(biāo)簽頁內(nèi)容切換顯示效果,結(jié)合完整實例形式分析了基于Bootstrap實現(xiàn)的標(biāo)簽頁內(nèi)容切換顯示功能相關(guān)操作技巧,非常簡單實用,需要的朋友可以參考下
    2017-05-05
  • 微信小程序支付功能完整流程記錄(前端)

    微信小程序支付功能完整流程記錄(前端)

    微信小程序的商戶系統(tǒng)一般是以接口的形式開發(fā)的,小程序通過調(diào)用與后端約定好的接口進行參數(shù)的傳遞以及數(shù)據(jù)的接收,下面這篇文章主要給大家介紹了關(guān)于微信小程序支付功能(前端)的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • javascript是怎么繼承的介紹

    javascript是怎么繼承的介紹

    關(guān)于js中的繼承,網(wǎng)上有很多文章了,在這里我寫出自己對js中的繼承的理解
    2012-01-01
  • js實現(xiàn)自動輪換選項卡

    js實現(xiàn)自動輪換選項卡

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)自動輪換選項卡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 通過網(wǎng)頁查看JS源碼中漢字顯示亂碼的解決方法

    通過網(wǎng)頁查看JS源碼中漢字顯示亂碼的解決方法

    這篇文章給大家主要介紹了通過網(wǎng)頁查看JS源碼的時候,發(fā)現(xiàn)漢字顯示是亂碼的解決方法,文中通過圖文詳解的介紹了解決的步驟,詳細(xì)會對大家很有幫助,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • JS Ajax請求如何防止重復(fù)提交

    JS Ajax請求如何防止重復(fù)提交

    這篇文章主要介紹了JS Ajax請求如何防止重復(fù)提交的相關(guān)資料,通過覆蓋掉$.ajax而達(dá)到防止重復(fù)提交的問題,實現(xiàn)代碼簡單,需要的朋友可以參考下
    2016-06-06
  • JavaScript的arguments對象應(yīng)用示例

    JavaScript的arguments對象應(yīng)用示例

    使用特殊對象 arguments,開發(fā)者無需明確指出參數(shù)名,就能訪問它們,下面為大家介紹下其具體的應(yīng)用
    2014-09-09

最新評論

临安市| 和平县| 杂多县| 措美县| 射洪县| 兰坪| 铜鼓县| 麻栗坡县| 宁都县| 绍兴市| 白山市| 凤山市| 龙州县| 拉萨市| 清镇市| 海宁市| 南投市| 白沙| 克什克腾旗| 三门峡市| 哈尔滨市| 江山市| 阿克苏市| 三都| 汝州市| 江油市| 镶黄旗| 平定县| 女性| 昭平县| 临颍县| 鱼台县| 滁州市| 汾西县| 天峨县| 孟连| 衢州市| 凤庆县| 长春市| 南康市| 萨迦县|