var 區域變數let 區域變數{ } 且同一範圍內,不允許重複宣告同一變數var 宣告過的變數,不能再使用 let 宣告一次let 宣告變數後,才能開始使用 ( 變數特性與 C# / Java 非常類似 )let,沒必要別使用 var。const 區域變數let 完全相同 ( block scope { })常數宣告,在JS,常數宣告的值不可再被改變。 所以會出現錯誤訊息 TypeError: Assignment to constant variable.
因為使用 const, let 來宣告的變數名稱不可以再被重新宣告(reassign),重複宣告會出錯: SyntaxError: Identifier 'myEmail' has already been declared。
若是用 var 宣告,則 var student ="xx"的值會被後面宣告 var student = "kk"; 的值覆寫掉。
//1  常數宣告
const PI = 3.14;
PI = 3333333;  //TypeError: Assignment to constant variable.
//2
const myEmail = "ak@xxx.com";
const myEmail = "ak@xxxdx.com.tw"; //SyntaxError: Identifier 'myEmail' has already been declared
var student = "ak";
var student = "kk";
ntd, 因此在瀏覽器中 可以印出 ntd(window.ntd 已處在全域環境中,window 可以省略) 就等於 30000。在文字編輯器要印出
window物件,會顯示window is not defined的錯誤, 在server 端執行環境 - node.js 的全域物件是global,所以要寫成global.ntd,在文字編輯器中就可以執行。
//3
let usd = 20000;
ntd = 30000;
console.log("ntd: " + window.ntd);            //"ntd: 30000"
global.console.log("ntd: " + global.ntd);    //global is not defined 
console.log(ntd);
Unexpected token 'const' 的錯誤,可參考查詢 JavaScript Reserved Words。//4
let const = const;  // Unexpected token 'const'
//5
const 112315664523 = 123;
//SyntaxError: const 112315664523 = 123;const 112315664523 = 123;
	
	const a = {};
	a.name = "kk";

let 宣告 i
	
	(function(){
	
		for( let i = 0; i < 10; i++ ){
			setTimeout(function(){ console.log(i); }, 100 * i);
		}
	})(); // 0 1 2 3 4 5 6 7 8 9  會產生10個 instance,每一次迴圈會產生一個獨立的 instance
var 宣告 i
	
	(function(){
	
		for( var i = 0; i < 10; i++ ){
			setTimeout(function(){ console.log(i); }, 100 * i);
			// i 會透過 scope chain 往上找,loop 先執行, setTimeout 才會開始跑
		}
	
	})();   // 10個10 
i 並沒有透過參數傳進 call back function 之中,所以在此 function 之中,並沒有宣告 i, 因此 console.log(i); 會透過 scope chain 會去找離它最近的上一層範圍的同名變數,但因為 loop 先執行, setTimeout 才會開始跑。
var 要像 let 一樣會印出 0 - 9 的正確寫法	
	(function(){
	
		for( var i = 0; i < 10; i++ ){
			setTimeout(function(i){ console.log(i); }, 100 * i, i);	
		}
	
	})();   
    /*
        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
    */
在每次的迴圈中都會呼叫setTimeout函式,i 透過參數將它的記憶體位址傳進setTimeout函式之中,當指定的時間到了可執行 function 的時候(每次迴圈的延遲時間為 100 * i 毫秒),丟到 function 的參數存起來作為變數 i, 每一次迴圈會產生一個獨立的實體(instance),總共會產生10個實體(instance)。