报错Uncaught ReferenceError: Cannot access 'calculate' before initialization如何解决
报错原因
这个报错是JavaScript的*暂时性死区(TDZ)*规则导致的:
你使用const声明了calculate箭头函数,而JS代码是自上而下顺序执行的,你在调用calculate(strValue)的时候,calculate的声明语句还在后续代码行未执行,变量还没有完成初始化,因此触发引用错误。const和let声明的变量都不存在变量提升,在正式声明之前访问就会触发该报错。
解决办法
可任选以下一种方案修改:
- 调整代码顺序,将
calculate的定义移到调用语句之前,示例代码如下:
const calculate = s => { // 此处保留你原有calculate函数的逻辑代码 } $: strValue = prompt("Please! enter the value "); $: abc = calculate(strValue); document.getElementById("demo").innerHTML = abc;
- 将
const定义的箭头函数改为普通函数声明,普通函数声明存在函数提升特性,在声明前调用不会报错,示例代码如下:
$: strValue = prompt("Please! enter the value "); $: abc = calculate(strValue); document.getElementById("demo").innerHTML = abc; // 普通函数声明支持提升,放在调用后也可正常执行 function calculate(s) { // 此处保留你原有calculate函数的逻辑代码 }
内容的提问来源于stack exchange,提问作者birsivasefsanesi
相关产品推荐
相关产品推荐

