2016年10月21日星期五

Google Blog 10/22/2016 (a.m.)

    • let声明的变量只在它所在的代码块有效
    • 如果使用let,声明的变量仅在块级作用域内有效
    • 上面代码中,变量ilet声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6
      • var a = [];for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); };}a[6](); // 10
    • let不像var那样会发生“变量提升”现象
      • 我把这章的代码都放到了最新的babel 6.7.7 try it out 里面去转码,并且打开了全部特性,结果发现文中所讲的变量提升和暂时性死区与babel的行为并不相符, 我们需要明确的是现在最终运行的代码还是es5, 没必要死扣规范,建议看的过程中都把文中的es6代码用babel的官方工具去试试,看看最终是怎么转换成es5的,一来可以看看es6到底对es5增强了什么,二来可以避免一些预想不到的错误
    • 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响
      • 这个问题和变量提升是一样的 我们在ES6/Babel是看不到预想的结果的
    • 在代码块内,使用let命令声明变量之前,该变量都是不可用的

Posted from Diigo. The rest of my favorite links are here.

没有评论:

发表评论