函数入参的传递

//[1]
vararr=[1,2]
functionchange(arr){
arr=[1,2,3]
}
change(arr)
console.log(arr)//=>[1,2]
//[2]
vararr=[1,2]
functionchange(arr){
arr.push(3)
}
change(arr)
console.log(arr)//=>[1,2,3]
按照《JavaScript高级程序设计》中的说法:
基本类型值的传递如同基本类型变量的复制一样。引用类型值的传递则如同应用类型变量的一样
为什么赋值不会改变外部arr,而push方法则会改变外部arr的值呢?
友情链接:[sof]IsJavaScriptapass-by-referenceorpass-by-valuelanguage?
HUX布斯
浏览 330回答 2
2回答

侃侃尔雅

在调用函数change的时候,change这个函数的作用域内会有一个新的变量arr,这个arr和全局的arr都指向同一个内存地址,即存储数组[1,2]的内存地址。代码段一执行arr=[1,2,3],也就是在内存中存储一个新的数组[1,2,3],然后把这个数组的内存地址赋值给arr,注意这个arr是change函数内的变量,所以这个arr指向数组[1,2,3]的内存地址,而全局的arr仍然指向[1,2]的内存地址。注意[1,2,3]是一个新的数组,所以需要一个新的内存空间。代码段二执行arr.push(3),首先会找到arr指向的数组,也就是[1,2],然后往这个数组中添加数据3,因为change函数内的arr和全局的arr指向的是同一个内存地址,而这个地址指向的内容已经改变了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript