zoukankan      html  css  js  c++  java
  • 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值。
  • 相关阅读:
    面向消息的持久通信与面向流的通信
    通信协议
    分布式系统简介
    Hadoop on Yarn 各组件详细原理
    Parquet文件结构笔记
    Redis部分数据结构方法小结
    Storm Ack框架笔记
    MapReduce格式与类型
    Hadoop 2.6 MapReduce运行原理详解
    Hadoop SequenceFile数据结构介绍及读写
  • 原文地址:https://www.cnblogs.com/rainbow8590/p/7096191.html
Copyright © 2011-2022 走看看