写js时,碰到一个奇怪的bug。将变量foo的值赋给变量bar后,改变bar也会改变foo。
简单研究过后,这种情况只是在改变object和array时发生。
var foo = {key: 'foo'}
var bar = foo // bar => {key: 'foo'}
bar.key = 'bar' // 改变bar这个对象
bar // => {key: 'bar'}
foo // => {key: 'bar'} foo竟然也被改变了
// go on
bar = 'change it to a string'
bar // => 'change it to a string'
foo // {key: 'bar'} 这回foo不变
结论:
js中不同变量存储的object并没有在内存中存储多份,而只将变量名(foo,bar)当成是对该对象的引用。array也能看成object,所以同样遵循这个规则。
网友评论