JavaScript的变量赋值问题
1、基本类型赋值
var a = 1
function fun(val) {
val = 3
}
fun(a)
console.log(a) // 1
过程如下:
解释:
function中只是对val值进行了改变,并没有对a进行改变,全程只是a的值赋给了val
2、对象类型内部值的改变
var a = {name:'abc'}
function fun(obj) {
obj.name = 'hc'
}
fun(a)
console.log(a.name) // hc
解释:
1、obj接收的是a的地址值,所以指向的是a
2、通过地址找到name,所以可以改变其name值
3、对象地址改变
var a = {name:'abc'}
function fun(obj) {
obj = {name:'hc'}
}
fun(a)
console.log(a) // 输出{name:'abc'}不发生改变
解释:
1、首先obj指向了a的地址
2、但是在第二步时,obj又指向了一个新的地址空间,并没有对a进行修改