输入list选项时触发ReferenceError错误,请求技术排查
解决"Cannot access 'input' before initialization"错误
你的问题出在循环内部重新用let声明了input变量,触发了JavaScript的暂时性死区(TDZ)规则:
在while的代码块里,你在if判断之后写了let input = prompt(...),这会在当前块级作用域里创建一个新的input变量。块内代码会优先使用这个新变量,但if语句执行时,这个新的input还没完成初始化(要到let声明的那一行才会初始化),所以访问input就会报错。
修改后的代码:
let input = prompt("What would you like to do ?!!!!!") const todos = [] while (input.toLowerCase() !== "quit" && input.toLowerCase() !== "q") { if (input === 'list') { console.log('++++++++++') } // 去掉let,直接赋值给外层已声明的input变量 input = prompt("What would you like to do ?!!!!!"); } console.log("OK!! Quit the app")
关键说明:
- 不需要在循环里重新声明
input,直接复用外层已经声明好的变量即可。 let声明的变量具有块级作用域,同一作用域内重复声明会引发问题,不同作用域则会覆盖外层变量并产生暂时性死区。
内容的提问来源于stack exchange,提问作者wannabedev
相关产品推荐
相关产品推荐

