javascript - 在for循环中重用函数而不在javascript中重置变量的正确方法是什么?
问题描述
我在尝试优化代码时遇到了这个问题。我正在尝试在我的代码中使用一个函数(似乎我必须重复代码 2 次才能使其工作,因为我没有得到我想要的结果):
let tmpCont = undefined;
let tmpPrice = undefined;
let evaluate = undefined;
let evaluate2 = undefined;
let cont = 0;
let tmp = true;
let cont2 = 30;
let tmp2 = false;
for (let i = 0; i < 10; i++) {
evaluate = analize(cont, tmp);
console.log(evaluate + "test");
evaluate2 = analize(cont2, tmp2);
console.log(evaluate2);
}
function analize(tmpCont, tmpPrice) {
for (let i = 0; i < 10; i++) {
tmpCont++;
}
return [tmpCont, tmpPrice];
}
结果我得到(我不想要的):
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
10,truetest
[ 30, false ]
我的问题是:我做错了吗?我知道为什么我得到了我不想要的结果并且我认为缺少某些东西但是我是否必须重复代码才能得到下面的结果?
我想要的结果:
10,truetest
[ 40, false ]
20,truetest
[ 50, false ]
30,truetest
[ 60, false ]
40,truetest
[ 70, false ]
50,truetest
[ 80, false ]
60,truetest
[ 90, false ]
70,truetest
[ 100, false ]
80,truetest
[ 110, false ]
90,truetest
[ 120, false ]
100,truetest
[ 130, false ]
解决方案
在javascript中,传递给函数的所有变量都是通过值而不是引用传递的。更改函数中的值不会更改传递的变量的值。您有 2 个选项:
- 传递一个包含您的计数的对象。
- 分配返回的值。
所以要做第一个:
let evaluate = undefined;
let evaluate2 = undefined;
const values={cont:0, price:true};
const values2={cont:30, price:false};
for (let i = 0; i < 10; i++) {
evaluate = analize(values);
console.log(evaluate + " test");
evaluate2 = analize(values2);
console.log(evaluate2);
}
function analize(tmp) {
for (let i = 0; i < 10; i++){
tmp.cont++;
}
return [tmp.cont, tmp.price];
}
或者:
let evaluate = undefined;
let evaluate2 = undefined;
let cont = 0;
let tmp = true;
let cont2 = 30;
let tmp2 = false;
for (let i = 0; i < 10; i++) {
[cont,tmp] = analize(cont, tmp);
console.log([cont,tmp] + " test");
[cont2, tmp2]= analize(cont2, tmp2);
console.log([cont2, tmp2]);
}
function analize(tmpCont, tmpPrice) {
for (let i = 0; i < 10; i++) {
tmpCont++;
}
return [tmpCont, tmpPrice];
}
推荐阅读
- r - 提高循环需要多个数据帧作为参数的用户定义函数时的效率
- javascript - Java代码正在通过硒打开Chrome URL但是无法单击按钮
- laravel - Laravel 与 Slack 集成的未知状态
- ios - iOS 企业应用程序在 iOS 12 上崩溃
- r - GGPLOT:如何在百分比图上显示总数
- jquery - 如何将主入口文件路径移动到index.json?
- reactjs - 错误:请求失败,状态码 405
- django - django ORM 将相关表上的两个条件转换为两个单独的 JOIN
- mysql - 使用特定格式查询字段
- wordpress - algolia wordpress 自动完成