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

为何调用first()无弹窗,赋值给新常量却正常?是否与ES6相关?

问题解答:为什么调用first()不弹窗,赋值后调用却可以?

嘿,这个问题其实和ES6箭头函数的特性没啥关系,核心是你没搞清楚函数返回函数时的调用逻辑~

先拆解下你的代码:

const first = () => { 
  const greet = "Hi"; 
  const second = () => { 
    alert("greet"); // 这里顺便提一句:你如果想弹出变量greet的值,应该去掉引号写成alert(greet)哦
  } 
  return second; 
}

关键逻辑点:

  • 当你调用first()的时候,这个函数的作用是返回second函数本身(也就是函数的引用),而不是直接执行second函数。所以此时只是拿到了second的“地址”,并没有触发它内部的alert代码,自然不会弹窗。
  • 当你把first()的返回值赋值给newFunc(const newFunc = first()),newFunc就相当于second函数的别名。这时候调用newFunc(),才是真正执行second函数里的代码,弹窗也就正常触发了。

补充验证:普通函数也一样

这个逻辑和是不是ES6箭头函数完全无关,换成普通函数也是同样的结果:

function first() {
  const greet = "Hi";
  function second() {
    alert(greet);
  }
  return second;
}

直接调用first()同样不会弹窗,必须通过first()()或者赋值后调用才能触发内部函数。

简化写法

如果你不想赋值给新变量,也可以直接连续调用两次:first()(),这样就能直接触发弹窗啦。

内容的提问来源于stack exchange,提问作者Aiden Campbell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:22