数组
在js
里,应该是属于地址引用
吧?就是把一个arr
传进去一个方法
里,方法
对他的操作,会直接影响该arr
。
下面我的代码,注释掉的问题1
和问题2
,两种写法,得出来的结果不一样。
我本来是不想用问题2这种写法的,因为既然是地址引用,应该是不用接收返回值也能影响到该arr,但是却。。。
// 初始化一个1~10的数组
let arr = [];
let max = 10,
d = 1;
while (d <= max) {
arr.push(d++);
}
//问题1 work(arr);
// alert(arr.toString()); // 输出0,2,0,4,0,6,0,8,0,10
//问题2 arr=work(arr);
// alert(arr.toString()); // 输出2,4,6,8,10
// 删除下标是单数的数据
function work(arr){
let i = 1;
for (i; i <= arr.length; ++i) {
if (i % 2 == 1) {
arr[i-1] = 0;
}
}
arr = arr.filter(q => q != 0); // 这里的过滤,似乎对问题1这种写法不起效。
return arr;
}
@新の助2 看一群人都在说filter 的问题,这里与filter关系不大,或不在点上。其实这里只与函数本身有关。
1.对参数进行赋值,不会对全局有影响
2.对参数的属性进行更改,会对全局有影响
上面这段代码是对参数属性的修改,所以改变了全局的arr
上面这段代码是对参数进行赋值,filter也没有对参数属性进行修改, 所以没影响到的全局的arr
参考内容 mdn 函数