使用let替换var实现块级做用域的小发现

在讲述javascript没有块级做用域的时候都会提到一个很是经典的例子:javascript

var obj={
    name:'helo',
    age:15
};
var arr=[];
    for(var i=0;i<5;i++){
        arr[i]=i;
        console.log(i);
    }
console.log(arr);
console.log(i);

由于javascript没有块级做用域,因此控制台打印出来的结果是:java

图片描述

具体什么缘由这里再也不赘述,有兴趣的能够去参考《javascript高级程序设计》es6

后来在es6上出现了一个能够定义块级块级做用域的声明let.不过因为当前浏览器对es6的支持很差,因此须要用 babel来实现es6到es5的转换。难道es6用了什么黑科技实现了块级做用域吗?转换后的结果就比较有趣了。浏览器

'use strict';

var obj = {
    name: 'helo',
    age: 15
};
var arr = [];
for (var _i = 0; _i < 5; _i++) {
    arr[_i] = _i;
    console.log(_i);
}
console.log(arr);
console.log(i);

这个结果也是醉了,如今你发现了并无什么黑科技,只是在for里面的i变量前加了一个下划线,而console.log()里面的i却没变,怪不得打印出来的i是undefine。babel

图片描述

相关文章
相关标签/搜索