为何调用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
相关产品推荐
相关产品推荐

