study
study copied to clipboard
引用传递 和 传递引用
深入理解JavaScript系列(19):求值策略(Evaluation strategy)
引用传递
将引用地址 直接 传递给标识符
var foo = { a: 1, b: 2 }
var bar = foo
bar = { c: 3, d: 4 }
console.log(foo) // { c: 3, d: 4 }
假设 foo 的内存引用地址为 0xFF
,把 foo 赋值给 bar 其实是把引用地址 0xFF
传递给 bar,当 bar 重新赋值时实际是给引用地址 0xFF
重新分配内存块。
传递引用
我觉着叫 引用拷贝传递 会更好理解
将引用地址 拷贝 后传递给标识符
var foo = { a: 1, b: 2 }
var bar = foo
bar = { c: 3, d: 4 }
console.log(foo) // { a: 1, b: 2 }
假设 foo 的内存引用地址为 0xFF
,把 foo 赋值给 bar 其实是拷贝引用地址 0xFF
(假设)为 0xFA
然后赋值给 bar,0xFF
和 0xFA
此时指向同块内存,当 bar 重新赋值时实际是给引用地址 0xFA
重新分配内存块。
在 JavaScript 的世界里使用的是 传递引用,亦可成为 按共享传递,即引用地址共享内存块。在更深的层面上,也可以说是 按值传递,因为传递的不过是引用地址的拷贝。
在 如何通过饿了么 Node.js 面试 中就有一道关于此知识点的基础题