JavaScript报错‘hasText(...) is not a function’求助排查
解决
hasText(...) is not a function报错问题 最近我写了一段JavaScript代码,声明了一个简单的本地函数hasText,但调用的时候却一直报错hasText(...) is not a function,代码如下:
function hasText(addrElem) { if (addrElem.value === "") { return false; } else { return true; } } var addr = [ document.getElementById('AccountRequest_AddressLine1'), document.getElementById('AccountRequest_City'), document.getElementById('AccountRequest_Country'), document.getElementById('AccountRequest_State'), document.getElementById('AccountRequest_PostCode') ];
别担心,我帮你梳理几个最可能的问题点和解决思路:
- 作用域没对上:要是你把
hasText写在了某个局部作用域里(比如另一个函数、if判断块内部),那在外部调用它的时候自然找不到——函数的作用域只限于定义它的那个代码块或者函数内部。你可以把函数移到全局作用域,或者确保调用它的代码能访问到它所在的作用域。 - 变量名被覆盖了:检查下代码后面有没有不小心给
hasText重新赋值的情况,比如写了var hasText = ''或者let hasText = null之类的。一旦函数被换成了其他类型的值,再调用它当然会报“不是函数”的错。 - 调用时机或写法错了:
- 要是你在函数声明之前就调用它(虽然函数声明会提升,但如果代码逻辑里有异步或者DOM加载顺序问题,也可能出状况),可以把调用代码放在函数声明之后,或者确保DOM加载完成后再执行调用逻辑。
- 还要检查调用代码的写法,是不是写成了
hasText[0]()这种错误形式?正确的应该是hasText(addr[0]),把数组里的DOM元素作为参数传进去。
- 快速排查小技巧:在调用
hasText之前,先打印console.log(typeof hasText),看看输出结果:- 如果是
undefined,说明当前作用域找不到这个函数,大概率是作用域问题; - 如果是
string、object之类的非function类型,那肯定是被其他值覆盖了。
- 如果是
内容的提问来源于stack exchange,提问作者aBlaze
相关产品推荐
相关产品推荐

