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}());