Ajax 板


LINE

請問一下 雖然不知道assign值能不能說是pass by reference 以下是我用firebug測試的code http://imgur.com/6v6bfIY 一開始的疑問是array(object)應該是pass by reference 所以b是指向a 在我a = [5]; 之後b應該也要變成[5] 但印出來卻仍然是原本的 同理下面的object也是 然後我找到這個 http://stackoverflow.com/questions/13104494/does-javascript-pass-by-reference 所以是一般會是pass by reference 但是直接改變他的reference時又會變成pass by value? 請問這要怎麼解釋會比較好呀? 感覺關鍵是那句「copy of a reference」 但是我不懂這句話的精髓是想要表達什麼 PS. 其實一開始是在寫function互傳才發現這件事 一直以為function是object所以應該就是pass by reference function A() {...} function B() {...} var C = B; 之後又B = A; 然後在執行C卻仍然是B而沒有變A 才發現我觀念根本錯了lolllll 求救各位大神Orz --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.1.136
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Ajax/M.1463486497.A.CB5.html
1F:→ mmis1000: 一律都是傳值(閉包例外),只是你可以傳上面有屬性的物件 05/17 20:04
2F:→ mmis1000: a.x = n 這句的意思是 修改 a 變數所持有的物件上的 x 05/17 20:05
3F:→ mmis1000: 屬性,但你在 a = {} 的同時,就已經把整個物件替換掉了 05/17 20:06
4F:→ mmis1000: 所以在這時候,a 跟 b早就是不同東西了 05/17 20:06
5F:→ mmis1000: 這時你在去修改 a ,當然不會反映在 b 上 05/17 20:07
嗯嗯我知道閉包是傳reference 但是大大的意思是 b=a 這樣也會是傳值? 傳值不就是複製一份自己的了嗎? 那更改a.x = n 為什麼也會連帶更改到b.x ?
6F:推 eight0: 在 JavaScript 中 [] 和 {} 會製造一個新物件 05/17 20:33
7F:→ eight0: 所以 a = [5] 是製造一個新 array 後讓 a 指向它 05/17 20:37
喔喔所以意思是 一開始 a = [1,2,3] a存的是指向[1,2,3]的位址 然後b = a 是傳值 但是是傳a指向的位址(這應該就是我上面題的那個copy of reference所要表達的?) 所以後來 a = [5] a會變成指向[5]的位址 而b仍然是存著指向[1,2,3]的位址? 是這個意思嗎? 突然有種豁然開朗的感覺m~_~m ※ 編輯: aa06697 (140.116.1.136), 05/17/2016 20:48:56
8F:推 Hevak: eight0正解 05/17 20:49
9F:→ Hevak: 你a=[1,2,3]的時候,這時候會有一個物件的內容是[1,2,3], 05/17 20:49
10F:→ Hevak: 然後你會把這個對物件的參照指派給a,所以你呼叫a會拿到這 05/17 20:50
11F:→ Hevak: 個物件 05/17 20:50
12F:→ Hevak: 這時候你a[1]=1,是把數字1指派給a參照的物件的索引1,所以 05/17 20:51
13F:→ Hevak: 這時候a儲存的參照還是對著原本的那個陣列 05/17 20:51
14F:→ Hevak: 但如果你再做a=[5],就是你新建立一個[5]的物件,把他的參 05/17 20:51
15F:→ Hevak: 照指派給a,所以這時候a已經遺失了對[1,2,3]的參照,a現在 05/17 20:52
16F:→ Hevak: 參照的物件是[5] 05/17 20:52
17F:→ Hevak: 你把物件指派給變數,實際上那個變數儲存的是對物件的參照 05/17 20:54
18F:→ Hevak: 所以: 05/17 20:54
19F:→ Hevak: a=[1,2,3] // a現在有對一個新的[1,2,3]物件的參照 05/17 20:55
20F:→ Hevak: b=a // 你把a的參照指派給b,所以a和b都是參照第1行的物件 05/17 20:55
21F:→ Hevak: a=[5] // 現在a保存的參照變成是對一個新的[5]物件 05/17 20:55
22F:→ Hevak: //可是同時b對第1行給的[1,2,3]的參照還在 05/17 20:56
23F:→ Hevak: 其實重點就只是變數保存的是對物件的參照,這樣而已,所以 05/17 20:57
24F:→ Hevak: 你在變數間互相指派,傳一定是傳這個參照 05/17 20:57
感謝各位 一直以為b=a傳reference是 b「指向」a 再指向內容 結果根本不是.... 是傳參照 現在才搞懂 錯了好久啊Orzzzzzz ※ 編輯: aa06697 (140.116.1.136), 05/17/2016 21:11:23







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP