JS中的值传递和引用传递
JS没有引用传递 (arguments除外)
-
值传递:内存独立,互不影响
-
引用传递:共享一块内存空间,指向同一个地址
var a = {}
var b = a
b.n = 3
a // {n:3}
var a = {}
var b = a
b = {n:3}
a // {}
// 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)