我正在尝试解决此编程问题,但无法在while循环内访问全局变量。当我访问全局变量时,它使我不确定。
function equal(h1, h2, h3) {
let sum1 = 0;
let sum2 = 0;
let sum3 = 0;
let first = [];
let second = [];
let third = [];
let count = 0;
while (h1.length !== 0) {
var popped = h1.pop();
sum1 += popped;
first.push(popped);
}
while (h2.length !== 0) {
var popped = h2.pop();
sum2 += popped;
second.push(popped);
}
while (h3.length !== 0) {
var popped = h3.pop();
sum3 += popped;
third.push(popped);
}
while (sum1 === sum2 && sum2 === sum3 && sum3 === sum1) {
// Below two consoles are not printing anything.
console.log(sum1, sum2, sum3);
console.log(h1, h2, h3);
if (sum1 > sum2) {
var x = first.pop();
sum1 = sum1 - x;
} else if (sum2 > sum3) {
var y = second.pop();
sum2 = sum2 - y;
} else {
var z = third.pop();
sum3 = sum3 - z;
}
}
}
console.log(equal([3, 2, 1, 1, 1], [4, 3, 2], [1, 1, 4, 1]));
答案 0 :(得分:1)
您没有从方法equal()
返回任何内容。因此,如果您尝试对其进行控制台,它将显示undefined
。请尝试返回一些值。
已附加代码段(已编辑)
function equal(h1, h2, h3){
let sum3 = 0;
let third = [];
let count = 0;
while (h3.length !== 0){
var popped = h3.pop();
sum3 += popped;
third.push(popped);
//here are the global variables inside while loop
console.log(sum3)
}
}
console.log(equal([ 3, 2, 1, 1, 1 ], [ 4, 3, 2 ], [ 1, 1, 4, 1 ]));
答案 1 :(得分:1)
1。误解什么是全局变量。
可以在函数的lexical scope中访问变量,并按从本地范围到父范围再到全局范围(浏览器中的window
,nodejs中的global
)的顺序对其进行评估。您所说的“全局范围”实际上是equal
函数或while
循环的局部范围。
2。期望从equal
返回值而没有返回语句
console.log(equal([3, 2, 1, 1, 1], [4, 3, 2], [1, 1, 4, 1]));
equal
不返回任何内容,因此不会将任何内容记录到控制台。
3。误解了JavaScript的评估方式
JavaScript同步评估代码(有关更多信息,请阅读this)。因此,您的while
循环将按顺序进行评估,一次一次,直到它们评估的每个数组的长度变为0。然后将评估您最后的while
循环。
while(sum1 === sum2 && sum2 === sum3 && sum3 === sum1)
仅当所有3个条件都为真时,此循环才会迭代。像您一样调用equal
:
equal([3, 2, 1, 1, 1], [4, 3, 2], [1, 1, 4, 1])
将导致最后的while
循环为假(这是伪代码):
sum1 = (3 + 2 + 1 + 1 + 1) = 8
sum2 = (4 + 3 + 2) = 9
sum3 = (1 + 1 + 4 + 1) = 7
---
sum1 != sum2 && sum2 != sum3 && sum3 != sum1
因此不会发生迭代,并且不会在最终console.log(sum1, sum2, sum3)
循环中打印while
。