var arr=[1,2,3,4];
function foo(arr){
arr[0]=0;
arr=0;
arr[0]=100;
return arr;
}
res=foo(arr);
console.log(arr);
console.log(res);
结果是://[0,2,3,4]
//[100]
为什么arr第一个值变成了0?
看代码感觉要么不变,要变也变成100的啊。
谢谢求解答!
你好,这牵涉到变量作用域的问题,你在函数内部的arr都没有用var声明,而是修改了全局变量arr,执行函数后改变了原有的赋值 。 arr = 0 后他在函数内已经不再是数组了
那为什么只有函数内第一个arr改变了原数组,而后面的没有覆盖呢?因为第二个arr其实不是数组,所以就不会影响吗?
@烫烫烫的菜鸟:
我建议你在 arr = 0 这一步后面,加上下面这句测试代码
console.log(arr.__proto__.constructor)
或者是
console.log(arr instanceof Array)
你会发现,在函数内arr = 0 后,函数内它已经不在是数组了,而是Number类型,所以在同一个函数域内你在让arr[0] = 100没有意义了已经
@OkayChen 明白了大神
js是动态类型语言,你foo函数中,arr=0语句之后的arr和外面的arr变量没有关系。