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