study icon indicating copy to clipboard operation
study copied to clipboard

引用传递 和 传递引用

Open cfour-hi opened this issue 7 years ago • 0 comments

深入理解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,0xFF0xFA 此时指向同块内存,当 bar 重新赋值时实际是给引用地址 0xFA 重新分配内存块。


在 JavaScript 的世界里使用的是 传递引用,亦可成为 按共享传递,即引用地址共享内存块。在更深的层面上,也可以说是 按值传递,因为传递的不过是引用地址的拷贝。

如何通过饿了么 Node.js 面试 中就有一道关于此知识点的基础题

cfour-hi avatar Dec 15 '17 10:12 cfour-hi