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