JavaScript中while循环外无法识别random_num1变量的原因及解决方法
为什么while循环外无法识别random_num1变量?如何解决?
嘿,这问题我之前也踩过一模一样的坑!你看,你虽然在循环外部已经用let random_num1;声明了这个变量,但在while循环内部又写了let random_num1 = ...——这里的let就是问题的关键!
用let重新声明后,循环内部的random_num1就变成了块级作用域的局部变量,它和外部声明的那个同名变量完全是两个独立的存在。外部的random_num1只是被声明了,从来没被赋值;而内部的那个只在循环的代码块里有效,一旦跳出循环,这个局部变量就被销毁了,所以你在循环外打印random_num1时,自然会显示undefined。
解决方法很简单:
去掉循环内部random_num1前面的let,直接对外部声明的变量进行赋值就行,这样整个作用域里用的都是同一个变量。另外我还帮你修正了一个小bug:原来判断input != NaN是无效的,因为NaN和任何值比较都是false,应该用!isNaN(input)来判断输入是否为有效数字~
修改后的代码如下:
let valid_input = false; let input; let random_num1; while (!valid_input) { // 这里也去掉了内部的let,避免重复声明input input = Math.round(Number(window.prompt("What should be the maximum number to guess?"))); if (!isNaN(input) && input > 0) { valid_input = true; guess_message.innerHTML = `Guess a number between 1 and ${input}`; } console.log(input); // 去掉let,直接赋值给外部的random_num1 random_num1 = Math.floor(Math.random() * Number(input)) + 1; console.log(random_num1); } console.log(random_num1); // 现在就能正常输出随机数啦!
内容的提问来源于stack exchange,提问作者kevinlxo
相关产品推荐
相关产品推荐

