javascript - 我如何理解传递一个对象并在 Javascript 中的函数中更改它?
问题描述
我了解对象是如何在 Javascript 中通过引用传递的。在以下代码中,我的函数更改了对象的属性。它按预期在全局范围内发生变化。我明白了。
let a = {name:'blah1'};
function something(obj1) {
obj1.name = 'blah2';
console.log(obj1); // prints {name:'blah2'}
}
something(a);
console.log(a); // prints {name:'blah2'}
在下面的代码中,我宁愿将另一个对象传递给我的函数,并使我的第一个对象等于第二个。这次它在全局范围内没有变化。我怎么能理解这个?
let a = {name:'blah1'};
let b = {name:'blah2'};
function something(obj1, obj2) {
obj1 = obj2;
console.log(obj1); // prints {name:'blah2'}
}
something(a,b);
console.log(a); // prints {name:'blah1'}
解决方案
obj1
和的范围obj2
仅限于功能,something
。换句话说,以下执行的范围仅限于函数,something
:
obj1 = obj2;
在函数中,obj1
现在将引用正在引用的同一对象,obj2
因此现在您可以使用obj1
例如对该对象进行更改
let a = {name:'blah1'};
let b = {name:'blah2'};
function something(obj1, obj2) {
obj1 = obj2;
console.log(obj1); // prints {name:'blah2'}
obj1.name='Ravish';
}
something(a,b);
console.log(a); // prints {name:'blah1'}
console.log(b) // prints {name:'Ravish'}
但在函数之外,这些引用(即obj1
和obj2
)不存在;这就是为什么console.log(a)
打印{name:'blah1'}
。
推荐阅读
- r - Can we setDT on multiple object all at once?
- javascript - Nextjs - 如何将 styled-jsx 应用于从方法返回的 jsx
- mysql - 狮身人面像不在只读数据库上重建
- asynchronous - 在 Flutter 中,如何在嵌套异步函数中完成 Future 后返回一个对象?
- android - 使用 kotlin 语言时 Android 服务崩溃
- c++ - 在 C++ 中定义字符串会导致编译器错误
- java - 使用 Unicode 转换字符串以在 java 中显示 unicode?
- c# - 从存储在 C# 变量中的值将相应的类传递给 typeof(__)
- xamarin - 单击选项卡按钮时显示警报
- x86 - 如何将 ld -Ttext 选项转换为链接描述文件?