JavaScript变量未初始化访问错误的原因排查与解决
问题:变量
nextImgId在if语句后抛出"Cannot access 'nextImgId' before initialization"错误 在实际项目中遇到如下问题:在最后一个if语句之前,log能正常输出nextImgId的整数值,但在该if语句之后,调用log(nextImgId)却抛出错误:"Cannot access 'nextImgId' before initialization"。变量已提前用let声明,怀疑是暂时性死区导致。
测试代码(可正常运行):
let nextImgId = img.getAttribute('data-next-id'); if (nextImgId !== null) { nextImgId = parseInt(nextImgId); log(nextImgId); if (true) { log(nextImgId); } } function log(...args) { console.log(...args) };
<img id=img src=//placekitten.com/50/50 data-next-id="123" />
已尝试刷新页面,问题依旧。已知上述测试代码无异常,想询问实际项目中可能导致该变量"消失"的原因。
已解决原因
问题出在if语句内的其余代码中,在该if块内部重声明了nextImgId变量(比如使用let nextImgId或const nextImgId),导致该变量的作用域被限定在if块内,触发了暂时性死区:在块级作用域内,变量声明语句之前访问该变量就会抛出此类错误。
内容的提问来源于stack exchange,提问作者darkė
相关产品推荐
相关产品推荐

