js 传值方式
挖掘js 传值方式
值的存储方式 (图的来源)

几个小栗子
// 基本类型
var x = 1;
function test(m) {
m = 2
}
test(x);
console.log(x); // 1
// 对象
var obj = {
a: 1
}
function test(m) {
m.a = 2
}
test(obj);
console.log(obj); // {a:1}
// 依旧是对象
var obj = {
a: 1
}
function test(m) {
m = 2
}
test(obj);
console.log(obj); // {a:1} ??? what mmpwhat??? 这👆的结果简直让人困惑,不知道 js 到底是按照值传递还是按照引用传递。
共享传递
- 1.js中基本类型按照值传递
2.对象类型按照共享传递
共享传参理解是:调用函数传参时,函数接受对象实参引用的副本。
var obj = {
a: 1
}
function test(m) {
// 这里的m 是相当于创建了一个副本obj,引用相同的值,同时也解释了为啥改内部值可以,但是重新复制就相当于重新换了一个指向
m.a = 2
}
test(obj);
个人总结:要修改一个非对象内的某个值的时候,不要使用函数传参
原文地址
原文
评论已关闭