首页 > 代码库 > 文章阅读(二)

文章阅读(二)

js闭包其实不难,你需要的只是了解何时使用它

究竟什么是闭包?闭包在什么场景下使用?写前端程序需要用到闭包吗?我用jQuery也能写的好好滴呀?闭包可以解决哪些问题?使用闭包会带来哪些好处?

闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。

包含两方面:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)

既然所有函数都是闭包,还有必要专门提这个概念吗?大多数函数被调用时(invoked),使用的作用域和他们被定义时(defined)使用的作用域是同一个作用域,这种情况下,闭包神马的,无关紧要。但是,当他们被invoked的时候,使用的作用域不同于他们定义时使用的作用域的时候,闭包就会变的非常有趣,并且开始有了很多的使用场景,这就是你之所以要掌握闭包的原因。

理解“闭包”:

  • step1:掌握嵌套函数的词法作用域规则(lexical scoping rules)。只要记住一点:词法作用域的规则,即函数被执行时(executed)使用的作用域链(scope chain)是 被定义 时的scope chain,而不是执行时的scope chain,就可以很容易的理解闭包的行为了。
  • step 2:掌握闭包的使用场景。
    • 闭包经典使用场景一:通过循环给页面上多个dom节点绑定事件
    • 闭包使用场景二:封装变量
    • 闭包使用场景三:延续局部变量的寿命

 

文章阅读(二)