gpt4 book ai didi

javascript - 修改大括号初始化对象之外的数组

转载 作者:行者123 更新时间:2023-11-28 18:27:25 25 4
gpt4 key购买 nike

行为问题:

为什么 Ninja.getArrayFromInside() 返回一个空数组? (Ninja.array修改后)

let Ninja = (function() {

let array = [];

function getArrayFromInside() {
return array;
}

return {
array, getArrayFromInside
};

})();

Ninja.array = [1, 2];

console.log(Ninja.getArrayFromInside());

我认为,这是关于通过值或通过引用传递......(为什么数组是按值传递,而不是按引用传递?)

同样的问题:

let Ninja = (function() {

let myObject = {};
myObject.array = [];

function getArrayFromInside() {
return myObject.array;
}

return {
array: myObject.array,
getArrayFromInside
};

})();

Ninja.array = [1, 2];

console.log(Ninja.getArrayFromInside());

最佳答案

在第一个示例中,有两个名为 array 的变量:声明的那个let array = [];getArrayFromInside 捕获的内部范围中函数,以及属性 Ninja.array这是两个不同的变量。您通过 array 引用的第一个变量。 ;第二个你可以引用this.array里面getArrayFromInside功能。

将它们初始化为对同一数组对象(最初为空)的引用。然后,您分配 Ninja.array引用不同的对象:数组 [1, 2] 。这不会修改 let array ...多变的;因为该函数获取 let array 的值,它返回原始的、仍然为空的数组对象。

尝试更改Ninja.array = [1, 2];Ninja.array.push(1);Ninja.array.push(2); 。您将看到像这样修改原始数组将导致更改反射(reflect)在 Ninja.getArrayFromInside() 中。打电话。

关于javascript - 修改大括号初始化对象之外的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38863099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com