gpt4 book ai didi

Javascript 作用域未设置全局变量

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

我有两个函数,其中 1 个将对象推送到数组中。它调用另一个函数,该函数从对象中删除键并仅将值存储在数组中。

但是,它并没有将预期结果设置为全局数组,我将使用它来处理代码的其余部分。

     var arr1 = [];

function foo(callback){
arr1.push({id: 1},{id: 2});
console.log(JSON.stringify(arr1));

callback(arr1);
}

foo(function(arr1){
bar(arr1);
});

function bar(arr1){
arr1 = arr1.map(x => x.id);
console.log(JSON.stringify(arr1));
}

console.log(JSON.stringify(arr1)); // I want the result to be [1,2]

我可以忽略第二个函数并将其所有内容放入第一个函数中,但这会使事情变得困惑,因为在我的实际代码库中,函数非常复杂。那么有什么办法可以解决这个问题吗?

最佳答案

我不会质疑你的设计 - 听起来你已经必须简化一些复杂的代码了。虽然其他答案提供了可行的替代解决方案,但它没有解释原因。

JS 参数不是“out”——粗略地翻译成 C,它们只是指针,而不是指向指针的指针。如果您替换函数内的参数值(通过 map result 完成),则修改将保留在函数作用域内。如果您想对函数进行修改,请应用其他答案提出的任何方法:

  • 将要修改的参数包装到复合对象中
  • 使修改成为返回值 - 简单地或在临时复合对象中
  • 将修改作为回调参数

确实没有办法解决这个问题。 JS没有语法,也不支持out参数。

关于Javascript 作用域未设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41161942/

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