• for循环与闭包


    for循环和闭包

    今天记录for循环和闭包的使用:
     for(var i = 0 ; i < lis.length ; i++) {
        lis[i].onclick=function(i){
            return function(){
            console.log(i)
            }
        }(i);
    }
    在for循环里面执行闭包的时候,将循环体的代码储存在一个内存中,对应的i值也储存在了内存中(闭包不销毁变量)。事件点击的时候是执行return之后的函数,在执行的时候,因为作用域的原因,使用的是事件之后的函数中的i值,这个i值在循环的时候已经储存为了对应的值,因此一次事件执行取到的i值都不一样。
    
    作用域的问题:
    var  i = 5;
    function fn(){
        var i = 2;
        return function(){
            console.log(i)
            i++
        }
    }
    var f = fn();
    
    f();    >>>2
    f(); >>>3
    fn()();  >>>2
    
    先找局部作用域中的,局部没有找上级,上级还没有,就一直往上级找,直到window(全局作用域)。
    
    
    闭包的扩展:jQuery
    
    jquery本身就是一个大的闭包。
    1.$('div') 获取的是一个集合,但是这个集合中的每一项都可以执行对应的事件,并且有自己的索引值。
    理解:当这个集合执行点击事件的时候形成了一个闭包,这个闭包里面有一个变量对应着div的下标,这个变量就是for循环时候对应的i值。
  • 相关阅读:
    C_数据结构_栈
    C_数据结构_链表
    C_数据结构_数组的修改和删除
    C_数据结构_数组
    Python_闭包_27
    Python_函数的镶嵌和作用域链_26
    P1428 小鱼比可爱
    P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows
    P2946 [USACO09MAR]牛飞盘队Cow Frisbee Team
    codevs 2173 忠诚
  • 原文地址:https://www.cnblogs.com/rainbow8590/p/7096191.html
Copyright © 2020-2023  润新知