使用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

圖片描述

相關文章
相關標籤/搜索