const,let,var的區別和用法spa
1.const——聲明一個只讀的常量,在聲明的時候給其賦初值,以後不能再進行賦值。code
1 const i = 0; 2 console.log(i); //有輸出,爲0
若是對 i 進行再次賦值則會報錯,TypeError:Assignment to constant variableblog
1 const i = 0; 2 i = 5; 3 console.log(i); //無輸出,報錯
2.var——用於聲明變量,聲明在方法外則爲全局變量,在方法內則爲局部變量,只能在方法內讀取。作用域
1 var i; 2 console.log(i); //若是不賦初值,輸出爲undefined
若是聲明變量時沒有使用 var 關鍵字,則該變量必定爲全局變量。到那時在調用的時候有如下區別:io
若是時聲明在方法外的全局變量,在方法內能夠直接使用;若是該全局變量時聲明在方法內部的,則在方法外使用該變量時須要先調用方法,告知系統聲明瞭全局變量才能使用。console
須要特別注意的問題:沒有使用 var 關鍵字定義的全局變量沒有預編譯過程,因此若是把變量的使用放在定義以前則會報錯。編譯
1 alter(i); // i is not defined 2 i = 1;
3.let——塊級做用域,方法內部使用 let 定義後對方法外沒有影響。function
let 時ES6新增的變量聲明命令,做用就是聲明一個局部變量。class
1 var a = []; 2 for(var i=0;i < 10;i++){ 3 //循環內的計數變量 i 使用var定義爲全局變量,因此循環過程當中會不斷地對值進行覆蓋 4 a[i] = function (){ 5 console.log(i); 6 } 7 } 8 a[6](); //最後的輸出是 10
var a = []; for(let i=0;i < 10;i++){ //這裏的 i 使用let定義爲局部變量,就是隻在當前循環生效,因此每次進行循環的 i 都是新的變量,值不會進行覆蓋 a[i] = function(){ console.log(i); } } a[6](); //最後的輸出是 6