为何此处变量无法找到?代码中secret变量未找到问题咨询
问题原因与修复方案
嘿,这个问题我太熟了——核心原因是变量作用域的问题!
为什么会报错?
你在do代码块内部用let声明了secret变量:
do { let secret = prompt("What is the secret password?"); } while ( secret !== "sesame");
而let声明的变量是块级作用域的,也就是说它只在{}包裹的do代码块内部有效。当代码执行到while条件判断时,已经跳出了do块的作用域,自然找不到secret变量;后面的alert语句也一样,访问不到这个局部变量。
修复方法
把secret变量的声明移到do-while循环的外部,这样它的作用域就能覆盖整个循环和后续代码:
// 在循环外部声明变量,让所有需要的地方都能访问到 let secret; do { secret = prompt("What is the secret password?"); } while (secret !== "sesame"); alert("You know the secret password. Welcome!");
小补充
如果换成var声明变量,虽然不会报错,但var是函数作用域,不符合现代JavaScript的最佳实践。用let声明在外部是更规范、更安全的做法。
内容的提问来源于stack exchange,提问作者Jessica Harris
相关产品推荐
相关产品推荐

