V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jianghu52
V2EX  ›  程序员

闭包理解起来总是很别扭,直觉上得到的结果跟实际上的不一样。怎么破。

  •  
  •   jianghu52 · 2015-09-29 09:16:39 +08:00 · 2607 次点击
    这是一个创建于 3351 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <script src=".js"></script>
    object2 那里我就是觉得应该是 the window 。
    3 条回复    2015-09-29 15:10:57 +08:00
    cuiweiqiang
        1
    cuiweiqiang  
       2015-09-29 09:33:20 +08:00 via Android   ❤️ 1
    这应该不是闭包的问题吧,是 this 的意义不清。一般 this 指向的是调用者,但是在匿名函数中 this 指向的是顶级对象。比如 window, node module 。
    joyee
        2
    joyee  
       2015-09-29 15:01:59 +08:00   ❤️ 1
    1 楼+1 ,这不是闭包的问题, JS 的闭包里变量都属于 lexical scope 也就是符合你说的“直觉”,但 this 不是 lexical scope 的,有另一套规则。不过如果你用 ES6 的 arrow function 的话 this 就是跟着 lexical scope 走的了 XD
    joyee
        3
    joyee  
       2015-09-29 15:10:57 +08:00
    @cuiweiqiang 不过说匿名函数里 this 指顶级对象也不太对……因为你可以用 bind / call / apply 弄到其他对象上去,或者把它赋值到另一个对象的属性上( obj.method = getFunc())再 obj.method() 这样 this 就变成 obj 了。只有在没有进行这种 binding 的情况下,才会默认指顶级对象。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1076 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:21 · PVG 02:21 · LAX 10:21 · JFK 13:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.