将函数赋值给let变量时出现TypeError: hidden1 is not a function错误
问题分析与解决
错误原因
你的hiddenCounter函数内部定义了addCounter,但只执行了addCounter(),没有返回这个函数本身。当你执行let hidden1 = hiddenCounter();时,hidden1拿到的是hiddenCounter的默认返回值——undefined(函数无return语句时默认返回undefined),所以调用hidden1()自然会抛出"不是函数"的错误。
修正代码
要让hidden1成为可调用的函数,需要让hiddenCounter返回addCounter函数:
let counter = 0; function hiddenCounter(){ function addCounter() { counter++; return counter; } // 返回addCounter函数,而非直接执行它 return addCounter; } let hidden1 = hiddenCounter(); // 现在hidden1指向addCounter函数,调用即可触发计数 console.log(hidden1()); // 输出1 console.log(hidden1()); // 输出2
如果需要调用hiddenCounter()时就先执行一次计数,同时保留后续调用能力,可以调整为:
let counter = 0; function hiddenCounter(){ function addCounter() { counter++; return counter; } // 先执行一次计数 addCounter(); // 再返回函数供后续调用 return addCounter; } let hidden1 = hiddenCounter(); // 此时counter已变为1 console.log(hidden1()); // 输出2
内容的提问来源于stack exchange,提问作者Zach Maudig
相关产品推荐
相关产品推荐

