js中const,var,let區別與用法
1.const定義的變量不可以修改,而且必須初始化。
1 const b = 2;//正確 2 // const b;//錯誤,必須初始化 3 console.log('函數外const定義b:' + b);//有輸出值 4 // b = 5; 5 // console.log('函數外修改const定義b:' + b);//無法輸出
2.var定義的變量可以修改,如果不初始化會輸出undefined,不會報錯。
1 var a = 1; 2 // var a;//不會報錯 3 console.log('函數外var定義a:' + a);//可以輸出a=1 4 function change(){ 5 a = 4; 6 console.log('函數內var定義a:' + a);//可以輸出a=4 7 } 8 change(); 9 console.log('函數調用后var定義a為函數內部修改值:' + a);//可以輸出a=4
3.let是塊級作用域,函數內部使用let定義后,對函數外部無影響。
1 let c = 3; 2 console.log('函數外let定義c:' + c);//輸出c=3 3 function change(){ 4 let c = 6; 5 console.log('函數內let定義c:' + c);//輸出c=6 6 } 7 change(); 8 console.log('函數調用后let定義c不受函數內部定義影響:' + c);//輸出c=3
js中的變量提升
在非嚴格模式下,JavaScript中存在變量提升的特點。
1. 原因
JavaScript的工作原理是先編譯再執行,在編譯過程中,解釋器會把所有聲明“移動”到所在作用域的最上面,而賦值或其他邏輯會留在原地,這就是變量提升。
例如
foo(); function foo(){ console.log(a); // undefined var a = 2; }
在編譯后將被理解為下面的形式
function foo(){ var a; console.log(a); // undefined a = 2; } foo();
2.函數優先
在提升過程中,函數聲明將首先提升,然后才是變量。只有函數聲明( function a(){} )才會被提升,函數表達式( var a = function b(){} )不會提升。如果存在相同的聲明,相同的變量聲明將被忽略;相同的函數聲明,后面的將會覆蓋前面的。
例如
foo(); // 1 var foo; function foo(){ console.log(1); } foo = function(){ console.log(2); }
將被理解為
function foo(){ console.log(1); } foo(); // 1 foo = function(){ console.log(2); }
參考文章:
https://blog.csdn.net/qq_36784628/article/details/80966826
https://www.cnblogs.com/diyichen/p/11183873.html