Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法访问while循环中的全局变量_Javascript_Arrays_While Loop - Fatal编程技术网

Javascript 无法访问while循环中的全局变量

Javascript 无法访问while循环中的全局变量,javascript,arrays,while-loop,Javascript,Arrays,While Loop,我试图解决这个编程问题,但是我无法访问while循环中的全局变量。当我访问全局变量时,它给出了未定义的值 函数等式H1、h2、h3{ 设sum1=0; 设sum2=0; 设sum3=0; 让我们先=[]; 让第二个=[]; 让第三个=[]; 让计数=0; 而h1.length!==0{ var popped=h1.pop; sum1+=弹出; 首先,推一下; } 而h2.length!==0{ var popped=h2.pop; sum2+=弹出; 第二,一鼓作气; } 而h3.length

我试图解决这个编程问题,但是我无法访问while循环中的全局变量。当我访问全局变量时,它给出了未定义的值

函数等式H1、h2、h3{ 设sum1=0; 设sum2=0; 设sum3=0; 让我们先=[]; 让第二个=[]; 让第三个=[]; 让计数=0; 而h1.length!==0{ var popped=h1.pop; sum1+=弹出; 首先,推一下; } 而h2.length!==0{ var popped=h2.pop; sum2+=弹出; 第二,一鼓作气; } 而h3.length!==0{ var popped=h3.pop; sum3+=弹出; 第三,一鼓作气; } 而sum1==sum2&&sum2==sum3&&sum3==sum1{ //下面两个控制台没有打印任何内容。 console.logsum1、sum2、sum3; 控制台logh1、h2、h3; 如果sum1>sum2{ var x=first.pop; sum1=sum1-x; }否则,如果sum2>sum3{ var y=second.pop; sum2=sum2-y; }否则{ var z=third.pop; sum3=sum3-z; } } }
logequal[3,2,1,1,1],[4,3,2],[1,1,4,1] 您没有从方法中返回任何内容。因此,如果您尝试对其进行控制台操作,它将显示undefined。请尝试返回一些值

附加的代码段已编辑

函数等式H1、h2、h3{ 设sum3=0; 让第三个=[]; 让计数=0; 而h3.length!==0{ var popped=h3.pop; sum3+=弹出; 第三,一鼓作气; //以下是while循环中的全局变量 console.logsum3 } } logequal[3,2,1,1,1],[4,3,2],[1,1,4,1];一些定义 一些误解 一,。误解什么是全局变量

变量在函数中是可访问的,并按顺序计算,从局部范围到父范围,再到浏览器中的全局范围窗口,再到nodejs中的全局范围窗口。您所指的全局范围实际上是相等函数或while循环的局部范围

二,。期望从equal返回一个值,而不使用return语句

equal不会返回任何内容,因此不会将任何内容记录到控制台

三,。误解JavaScript的评估方式

JavaScript评估同步读取的代码以获取更多信息。因此,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循环为false这是伪代码:

sum1 = (3 + 2 + 1 + 1 + 1) = 8 
sum2 = (4 + 3 + 2) = 9 
sum3 = (1 + 1 + 4 + 1) = 7
---
sum1 != sum2 && sum2 != sum3 && sum3 != sum1

因此,迭代将不会发生,最终while循环中的console.logsum1、sum2、sum3将不会被打印。

您的函数不会返回任何内容,因此console.log将打印未定义的内容。我的意思是,当我访问console.logsum1、sum2、sum3或console.logh1、h2、h3时,它会打印未定义的内容。@devesh这些都不是全局变量,它们都是函数的本地行。你永远无法访问那些console.log行,因为while条件不是真的。sum1==8,sum2==9,sum3==7,所以你根本就不会进入while循环。这是真的,但这与访问while循环中的全局变量有什么关系?他的评论说,当我访问console.logsum1,sum2时,sum3或console.logh1、h2、h3的内部打印undefined@Barmar我们可以在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