2016-12-16 100 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

相关问题