在讲述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