js中 const、var、let區別與變量提升


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM