JS函数传参问题
曾看的一本JS的书,记得上面说到,JS函数的参数都是值引用,当时也没在意,只知道,我一个数组传进函数,我给形参push了一个值,实参的数组也变了么,然后这块就忽略了。偶然在工作处理一个bug时,再次遇见了这个问题。
抽出bug中的主要问题,可以表示成如下:
var arr = [1, 2, 3];
changeArr(arr);
function changeArr(a) {
a = [4, 5, 6];
}
// arr; [1, 2, 3]
当时,竟然没有意识到这边有错,后来是断点才发现的。 可能是习惯了这种写法的原因,总以为传入的是数组,或者是对象,就可以直接改变值了,
var arr = [1, 2, 3];
changeArr(arr);
function changeArr(a) {
a.push(4, 5, 6);
}
// arr; [1, 2, 3, 4, 5, 6]
这样的话,对形参的操作是成功的。 在JS中,参数是只能按值来传递的,但是访问变量可以是有按值和按引用两种的,所以会照成这样的问题。