JavaScript调用calcAverage报错不是函数但已定义该如何解决
报错原因
- 变量被意外覆盖:你使用
let声明了顶层变量calcAverage为箭头函数,但函数内部直接对同名的顶层变量进行了重新赋值。第一次调用calcAverage函数时,函数内部的赋值逻辑会把calcAverage的值修改为数字类型的计算结果,此时calcAverage不再是函数,第二次调用时自然会抛出calcAverage is not a function的类型错误。 - 额外逻辑问题:当前的平均值计算存在运算符优先级错误,
v1+v2+v3 / 3的实际执行逻辑为v1 + v2 + (v3 / 3),不符合三个数求和后取平均的需求。
修复方案
将函数内部的计算结果存入局部变量,不要覆盖顶层的函数变量,同时修正运算优先级即可:
let calcAverage = (v1, v2, v3) => { // 使用局部变量存储结果,避免修改顶层的函数变量 const average = (v1 + v2 + v3) / 3; return average; } const d1 = calcAverage(44, 23, 71) const k1 = calcAverage(44, 23, 71) console.log(d1)
如果后续不需要修改calcAverage的指向,也可以直接用const声明该函数,这样当你意外给它赋值时会提前抛出常量赋值错误,更容易定位问题。
内容的提问来源于stack exchange,提问作者Golden-Dragon
相关产品推荐
相关产品推荐

