美文网首页
关于 es6的 let 特性在 for 循环结构 的个人理解

关于 es6的 let 特性在 for 循环结构 的个人理解

作者: codingC | 来源:发表于2017-11-03 10:46 被阅读0次

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的情况类似之前的闭包:子级函数作用域->父级函数作用域->全局作用域;

相关文章

  • 关于 es6的 let 特性在 for 循环结构 的个人理解

    1:var a=[]; for(var i=0;i<10;i++){ a[i]=function(){consol...

  • ES6学习笔记 新特性

    es6出现的新特性:循环for(let i=0;i<10;i++),出现for(let str for arr),...

  • ES6

    一、let和const 1.let 在 js/es6 中,用let在for循环中声明的变量,在外部无法访问 let...

  • let和const

    ES6中有两个新特性:let和 const,为了理解let,我们需要记住var是创建函数生存期内的变量: 不像Ja...

  • ES6 实用新增特性总结

    以下内容是我在学习ES6的语法时整理的一些比较常用的新特性。 let和const let可以理解为var的替代版本...

  • es6新特性

    ES6 新特性 ES6 新特性 一ES6简介 二块级作用域绑定1 let声明2 const声明Constant D...

  • 前端框架复习相关

    1、ES6的新特性及其作用 (1)、let和consta、let与var类似,但只在let命令所在的代码块内有效b...

  • ES6学习

    最常用的ES6特性let, const, class, extends, super, arrow functio...

  • 无标题文章

    最常用的ES6特性 let, const, class, extends, super, arrow functi...

  • JavaScript ES6新语法

    最常用的ES6特性 let, const, class, extends, super, arrow functi...

网友评论

      本文标题:关于 es6的 let 特性在 for 循环结构 的个人理解

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