为何typeof(f())等于'number'?JavaScript闭包代码行为疑惑
理解这段JavaScript闭包代码的行为
先拆解代码的核心逻辑:
- 外层是一个立即执行函数表达式(IIFE):函数定义后紧跟
(),意味着这个函数会被立刻执行,而非把函数本身赋值给f。 - 外层函数执行时,创建局部变量
state并赋值为1,随后返回内部的匿名函数。最终f指向的是这个内部函数,不是外层函数。
当调用f()时,执行的是这个内部函数:
- 内部函数返回
state++,这是后置自增操作——先返回当前state的值(第一次调用为1),再将state加1。 - 这个返回值是数字类型,因此
typeof f()的结果自然是'number'。
另外,内部函数通过闭包保留了对state的引用,每次调用f()都会让state递增,实现了跨函数调用维持状态的效果。
内容的提问来源于stack exchange,提问作者Rando McRandom
相关产品推荐
相关产品推荐

