天天看點

const, var, let的差別

js中三種定義變量的方式const, var, let的差別。

1.const定義的變量不可以修改,而且必須初始化。

1const b = 2;//正确2//const b;//錯誤,必須初始化3console.log('函數外const定義b:' + b);//有輸出值4//b = 5;5//console.log('函數外修改const定義b:' + b);//無法輸出

2.var定義的變量可以修改,如果不初始化會輸出undefined,不會報錯。

1vara = 1;2//var a;//不會報錯3console.log('函數外var定義a:' + a);//可以輸出a=14functionchange(){5a = 4;6console.log('函數内var定義a:' + a);//可以輸出a=47}8change();9console.log('函數調用後var定義a為函數内部修改值:' + a);//可以輸出a=4

3.let是塊級作用域,函數内部使用let定義後,對函數外部無影響。

1let c = 3;2console.log('函數外let定義c:' + c);//輸出c=33functionchange(){4let c = 6;5console.log('函數内let定義c:' + c);//輸出c=66}7change();8console.log('函數調用後let定義c不受函數内部定義影響:' + c);//輸出c=3

javascript 嚴格模式

第一次接觸let關鍵字,有一個要非常非常要注意的概念就是”javascript 嚴格模式”,比如下述的代碼運作就會報錯:

lethello ='hello world.';console.log(hello);

錯誤資訊如下:

let hello ='hello world.';^^^SyntaxError: Block-scoped declarations (let, const,function, class) not yet supported outside strict mode...

解決方法就是,在檔案頭添加”javascript 嚴格模式”聲明:

'use strict';lethello ='hello world.';console.log(hello);

更多更詳細的關于”javascript 嚴格模式”說明,請參考阮一峰的部落格

'use strict';(function(){varvarTest;letletTest;  console.log(varTest);//輸出undefinedconsole.log(letTest);//輸出undefined}());

​​使用未聲明的變量,表現不同:​​

​​重複聲明同一個變量時,表現不同:​​

​​變量作用範圍,表現不同​​

繼續閱讀