Javascript 全局更新函数中变量的值,以便下一次映射迭代在ReactJs中具有更新的值

Javascript 全局更新函数中变量的值,以便下一次映射迭代在ReactJs中具有更新的值,javascript,reactjs,react-native,functional-programming,Javascript,Reactjs,React Native,Functional Programming,我有一个简单的函数,更新全局值,这些值在映射迭代中使用,但在映射迭代中不会更新值 index.js var arrayTest = [Mark, John, Patrick]; var xTest = 0; var yTest = 0; function testGlobal(xTest, yTest) { xTest = xTest + 1; yTest = yTest + 1; console.log(xTest, yTest); } arrayTes

我有一个简单的函数,更新全局值,这些值在映射迭代中使用,但在映射迭代中不会更新值

index.js

 var arrayTest = [Mark, John, Patrick];
 var xTest = 0;
 var yTest = 0;

function testGlobal(xTest, yTest) {
    xTest = xTest + 1;
    yTest = yTest + 1;
    console.log(xTest, yTest);
  }

 arrayTest.map((index) => {
        testGlobal(xTest, yTest);
      });

我想先用0和0调用testGlobal,然后用1和1调用testGlobal,然后用2和2调用testGlobal,等等。。。当前使用此设置时,每个映射调用都使用0。

对testGlobal函数参数使用不同的名称,如下所示

函数testGlobal(x,y){ xTest=x+1; y试验=y+1; console.log(xTest,yTest);
}当调用
testGlobal
函数时,只传递全局变量的值,而不是引用本身。因此,您的
xTest
yTest
功能输入参数每次的值均为
0
。由于这些函数参数与全局变量同名,因此在函数范围内会忽略全局变量。因此,虽然您可能认为您在增加全局变量,但实际上您只增加了函数输入参数。这就是为什么每次函数调用后,
console.log
都会显示
11
。您有多种方法可以解决此问题,以下是其中的一些方法:

第一次进近-传递对象参考

var arrayTest = ['Mark', 'John', 'Patrick'];
var test = {
  x: 0,
  y: 0
};

function testGlobal(test) {
  test.x++;
  test.y++;
  console.log(test.x, test.y);
}

arrayTest.map((index) => {
  testGlobal(test);
});
第二种方法-更改方法变量名称

var arrayTest = ['Mark', 'John', 'Patrick'];
var xTest = 0;
var yTest = 0;

function testGlobal(x, y) {
  xTest = x + 1;
  yTest = y + 1;
  console.log(xTest, yTest);
}

arrayTest.map((index) => {
  testGlobal(xTest, yTest);
});
var arrayTest = ["Mark", "John", "Patrick"];
 var xTest = 0;
 var yTest = 0;

function testGlobal(xTest, yTest) {
    window.xTest = xTest + 1;
    window.yTest = yTest + 1;
    console.log(xTest, yTest);
  }

 arrayTest.map((index) => {
        testGlobal(xTest, yTest);
      });
第三种方法-不传递任何内容,直接增加全局变量

var arrayTest = ['Mark', 'John', 'Patrick'];
var xTest = 0;
var yTest = 0;

function testGlobal() {
  xTest++;
  yTest++;
  console.log(xTest, yTest);
}

arrayTest.map((index) => {
  testGlobal();
});

试试这个

var arrayTest = ['Mark', 'John', 'Patrick'];
var xTest = 0;
var yTest = 0;

function testGlobal(x, y) {
  xTest = x + 1;
  yTest = y + 1;
  console.log(xTest, yTest);
}

arrayTest.map((index) => {
  testGlobal(xTest, yTest);
});
var arrayTest = ["Mark", "John", "Patrick"];
 var xTest = 0;
 var yTest = 0;

function testGlobal(xTest, yTest) {
    window.xTest = xTest + 1;
    window.yTest = yTest + 1;
    console.log(xTest, yTest);
  }

 arrayTest.map((index) => {
        testGlobal(xTest, yTest);
      });

这种情况下的原因是您更改了函数参数的值,而不是顶部的变量声明

   function testGlobal() {
    xTest = xTest + 1;
    yTest = yTest + 1;
    console.log(xTest, yTest);
  }
// xTest = 2
// yTest = 2


您正在使用函数的参数标签隐藏全局变量。更改参数名称或忽略它们,这将起作用

var arrayTest = ["Mark", "John", "Patrick"];
var xTest = 0;
var yTest = 0;

function testGlobal() {
  console.log(xTest, yTest);
  xTest++;
  yTest++;
}

arrayTest.map(() => {
  testGlobal();
});

似乎我们需要更多的信息来最好地回答您的问题。例如,在此场景中如何使用React?是否将全局变量呈现到页面?全局变量是必要的吗?如果是,为什么?如果两个全局变量相同,那么为什么需要两个单独的变量跟踪相同的值?对于数组中的每个项,变量是否总是以0开头并递增1?如果最后一个是真的,那么您应该能够使用
map
index
参数,并在组件内部执行类似操作:

var arrayTest=[“马克”、“约翰”、“帕特里克”];
函数testGlobal(计数){
控制台日志(计数);
}
返回(
{arrayTest.map((_,索引)=>{
testGlobal(索引);
//或呈现某物:
//{index}

//或将计数传递给子组件: // })} );
这是为什么?如果与此无关,则应删除标记,但如果在React中更新某些全局数据,则答案将完全不同。