为何出现未定义错误?语法正确却报getBirthyear未定义问题咨询
解决
Uncaught ReferenceError: getBirthyear is not defined 报错 嘿,这种报错我也碰到过好几次!虽然代码语法看起来没问题,但ReferenceError: getBirthyear is not defined通常是函数的定义时机、作用域或者加载顺序出了问题,给你梳理几个最常见的原因和解决办法:
函数定义在调用之后,且用了函数表达式而非声明
JavaScript里函数声明会被“提升”到作用域顶部,但函数表达式(用const/let/var定义的函数)不会。比如下面的写法就会报错:// 错误:调用在函数表达式定义之前 console.log(getBirthyear(1990)); const getBirthyear = (birthYear) => new Date().getFullYear() - birthYear;解决办法要么把调用移到函数定义之后,要么改成函数声明:
// 正确:函数声明会被提升,调用可以在定义前 console.log(getBirthyear(1990)); function getBirthyear(birthYear) { return new Date().getFullYear() - birthYear; }函数被定义在局部作用域里,却在全局/外部作用域调用
如果你的getBirthyear是在if块、函数内部或者其他局部作用域里定义的,外部作用域根本访问不到它:// 错误:函数在if块内定义,全局调用不到 if (true) { function getBirthyear(birthYear) { return new Date().getFullYear() - birthYear; } } getBirthyear(1990); // 报错解决办法是把函数移到需要调用它的作用域里,或者确保调用操作在函数定义的作用域内执行。
调用时拼错了函数名
别笑,这真的是高频坑!比如你定义的是getBirthyear(小写y),但调用的时候写成了getBirthYear(大写Y),或者多写/少写了字母,JS就会认为这是个未定义的函数。仔细核对一下调用处和定义处的函数名拼写、大小写。脚本加载顺序出错
如果getBirthyear是在另一个JS文件里定义的,而你的app.js(调用它的文件)先加载了,那浏览器执行app.js的时候,这个函数还没被定义:<!-- 错误:先加载调用的脚本,后加载定义的脚本 --> <script src="app.js"></script> <script src="functions.js"></script>调整加载顺序,先加载定义函数的脚本:
<!-- 正确:先加载定义脚本,再加载调用脚本 --> <script src="functions.js"></script> <script src="app.js"></script>
你可以对照这几点检查你的代码,大概率能找到问题所在!
内容的提问来源于stack exchange,提问作者Tommy Shaw
相关产品推荐
相关产品推荐

