函数传参数是传引用,为什么下面这样赋值不起作用?
var a = [1,2,3]
function fn(arr){
arr = a
}
var b = []
funcArr(b)
b // []
当遍历就可以
var a = [1,2,3]
function fn(arr){
for(var i in a){
arr[i] = a [i]
}
}
var b = []
funcArr(b)
b // [1,2,3]
这意味着我不能改变b?可以直接赋值
var a = [1,2,3]
function fn(){
b = a
}
var b = []
funcArr(b)
b // [1,2,3]
但是通过传参数b就不能赋值但是可以改变b的key来改变b
function fn(arr){
arr.push[1]
}
var b = []
funcArr(b)
b // [1]
你搞错了一个概念,就是ECMAScript中所有的函数传参都是按值传递的。
1.对于基本类型,都知道是按值传递的(把值从一个变量复制到另一个变量)。
2.对于引用类型,在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量。来看一个例子:
这个例子最后的打印结果是"Sun",而不是"Moon"。
分析一下:
了解了参数是按值传递的,现在回到你的问题上,你将b作为参数传给function,然后再function内部重新给参数arr赋值为a,b并没有任何变化,所以还是原来的定义的空的数组。