var a=[1,2,3] var add=function (arr) { arr.splice(0,1) } add(a) console.log(a) //[2,3] var add1=function (arr) { arr="1" } add1(a) console.log(a) //[2,3]这是为何.. 参数如果是切断this指向复制一个新值 那arr.spice(0,1)就不会改变 如果是指向引用 那arr="1" console.log()出来的应该是1?
1 回答

蓝山帝景
TA贡献1843条经验 获得超7个赞
题主同意的答案明显有错误,JS的函数参数是分按值传递和传址传递的,如果都是传值传递,那么结果就得像PHP一样,什么都不会有改动,就算用了 splice 。(顺便一提在php中需要使用&用作引用传递)
只不过如果传递的是复合类型,如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。
var add1=function (arr) {
arr="1"
}
add1(a)
这里在函数add1()可以看作:
// 把参数赋值给形参
arr = a;
// 又赋值给了 1
arr = '1'
这里当然没有被修改。
添加回答
举报
0/150
提交
取消