2016-12-16 58 views
-3
var arr = ["d","b","c"] 
var a1 = arr 
arr.sort() 
arr = ["a","b","w"] 

console.log(a1) //printing [ 'b', 'c', 'd' ] 

在上面的代碼片段中,.sort()操作在打印a1時得到反映。但是,當我重新分配arr時,爲什麼a1在打印時不是指新的值?爲什麼以下Javascript代碼片段的行爲如此?

+1

你重新分配ARR的引用,不A1。這對我來說很明顯。 JS中的變量不會像指針一樣行事。有基礎研究的 – nicovank

+0

你可以找到答案。 – Belfordz

+0

這是編程的基礎:值和參考。 'a1 = arr'表示您將arr的引用賦值爲變量a1的值。因此,所有發生在a1上的事情都會影響到arr,因爲它們指向相同的值。 (數組[d,b,c])。 – Kai

回答

2
var arr = ["d","b","c"] 
  • 創建一個數組
  • 設置的arr的值以該數組
var a1 = arr 
    基準
  • 份數arra1值,現在這兩個變量保持對這個數組的引用
arr.sort() 
  • 排序陣列
arr = ["a","b","w"] 
  • 創建陣列
  • 設置的arr的值以該數組
  • a1是未修飾的參考,其值仍然是第一陣列
+0

但是,當我排序時,這也是一個可變操作,它只修改'arr'而不是'a1'。那麼爲什麼這項任務不會以同樣的方式工作? –

+0

@SaikatBhattacharya - 「它只是修改arr不是a1」 - 錯誤。它正在修改這兩個變量都引用的數組。 – Quentin

+0

@SaikatBhattacharya - 「爲什麼賦值不能以相同的方式工作」 - 因爲賦值會覆蓋變量的值。它用新值(差異參考)替換參考。 – Quentin

相關問題