Javascript 全局更新函数中变量的值,以便下一次映射迭代在ReactJs中具有更新的值
我有一个简单的函数,更新全局值,这些值在映射迭代中使用,但在映射迭代中不会更新值 index.jsJavascript 全局更新函数中变量的值,以便下一次映射迭代在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
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中更新某些全局数据,则答案将完全不同。