zoukankan      html  css  js  c++  java
  • 关于 es6的 let 特性在 for 循环结构 的个人理解

    文章摘抄自https://www.jianshu.com/p/8f890da2d8bc

    1:var a=[];

    for(var i=0;i<10;i++){

    a[i]=function(){console.log(i);};

    }

    a[6]();//10

    2  :var a=[];

    for(let i=0;i<10;i++){

    a[i]=function(){console.log(i);};

    }

    a[6]();// 6

    let 声明的变量只在 块级作用域内有效,so 上面的 let 代码块,可以这么理解:

    for循环里的 ()和 { } 合起来是 一个大的块级作用域,并且()是父级作用域,{ }是个单独的子级作用域,每次循环会创建一个新的【()和 { }】 合起来的一个大的块级作用域状态,所以每次 i 的值都对应一个新的大的块级作用域的状态,大的块级作用域的状态下的 { } 子级作用域之间是相互独立的,并且每次()父级作用域会记住上次循环的父级作用域内的循环变量的值,然后基于此值计算本次循环变量的值,以此类推,直至循环结束。

    函数在调用的时候,会去函数定义的地方沿着作用域链向上以类似DOM树的冒泡的方式查找变量的值:(以下的父级函数作用域都是在 如果有的情况下 发生)

        var的情况是: 子级函数作用域-> 父级函数作用域->全局作用域;

        let的情况是:子级函数作用域->块级作用域[{子 } -> (父)]->父级函数作用域->全局作用域;

        let的情况类似之前的闭包:子级函数作用域->父级函数作用域->全局作用域;


    别人总结的太好了
  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/xufeng1994/p/10473271.html
Copyright © 2011-2022 走看看