闭包

作者: ninja梅梅 | 来源:发表于2016-07-27 17:22 被阅读12次

    闭包

    就是可以让函数访问该函数声明时的作用域内的所有变量和函数。

    例如:

    接下来是关于()的有意思的用法。“()”紧跟在函数后面,表示立即调用该函数

    例如:

    代码定义了一个立即执行函数并返回给counter,这个函数定义了一个局部变量count,返回了一个子函数,该子函数每次调用,都会把count加一并返回,下一次调用时会在上一次调用的基础上加一,可以想象成闭包将保护着count每一次运行的值。

    等效于

    需要避免的问题:

    add_the_handlers函数本意是想传递给每个事件处理器一个唯一的值(i)。也就是每次点击nodes时,输出对应的 i 。但事实上,每次点击nodes,只会在控制台输出相同的值。

    这是因为事件处理器函数绑定了变量 i 本身,而不是函数在构造时的变量 i 的值。换句话说闭包中输出的 i 是它所在作用域中的 i 的值,在循环结束后 i 的值变为4。而闭包本身绑定了变量 i ,输出的值会跟随变量 i 的变化而变化,最后输出4。

    要使每次点击nodes时,输出对应的 i,可使用下述代码:

    这里使用一个立即执行函数并传递当前的 i 值即上面的(i),返回一个新的函数。在这个新生成的函数的闭包中保存了当前的 i 值。这样可以得到想要的结果了。

    还有一个和变量提升有关的容易混淆的东西:

    代码详情可参见我的博客胖胖梅博客JS笔记之闭包 

    相关文章

      网友评论

        本文标题:闭包

        本文链接:https://www.haomeiwen.com/subject/jlwojttx.html