JS中的值传递和引用传递

JS中的值传递和引用传递

JS没有引用传递 (arguments除外)

  • 值传递:内存独立,互不影响

  • 引用传递:共享一块内存空间,指向同一个地址

var a = {}
var b = a 
b.n = 3
a // {n:3}

wechat_2025-10-20_092618_604

var a = {}
var b = a 
b = {n:3}
a // {}

wechat_2025-10-20_092810_642

// arguments
function fn(a) {a = 100;                   // 修改形参console.log(arguments[0]); // 输出 100(与形参同步)
}
fn(10);function fn(a) {arguments[0] = 100;        // 修改 argumentsconsole.log(a);            // 输出 100(与 arguments 同步)
}
fn(10);

但在ES6之后,具有真正的引用传递

ES模块具名导出是引用传递

export let a = 1setTimeout(() => {a++
},1000)
import {a as k} from './index.js'console.log(k)   // 1
setTimeout(() => {console.log(k) // 2
},1500)