You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将函数赋值给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:50:22