js中const,var,let區別


ES2015(ES6) 新增加了兩個重要的 JavaScript 關鍵字: let 和 const

let 聲明的變量只在 let 命令所在的代碼塊內有效。

const 聲明一個只讀的常量,一旦聲明,常量的值就不能改變。

在 ES6 之前,JavaScript 只有兩種作用域: 全局變量 與 函數內的局部變量

 

1.const 聲明一個只讀的常量,一旦聲明,常量的值就不能改變。

conset的主要作用:

(1)可以定義const常量,具有不可變性。
  例如:const int Max=100; Max++會產生錯誤;
(2)便於進行類型檢查,使編譯器對處理內容有更多了解,消除了一些隱患。
  例如: void f(const int i) { .........} 編譯器就會知道i是一個常量,不允許修改;
(3)可以避免意義模糊的數字出現,同樣可以很方便地進行參數的調整和修改。 同宏定義一樣,可以做到不變則已,一變都變!
  如(1)中,如果想修改Max的內容,只需要它修改成:const int Max=you want;即可!
(4)可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。 還是上面的例子,如果在函數體內修改了i,編譯器就會報錯;
  例如: void f(const int i) { i=10;//error! }
(5) 可以節省空間,避免不必要的內存分配。 例如:
  #define PI 3.14159 //常量宏
  const double  Pi=3.14159; //此時並未將Pi放入ROM中 ......
  double i=Pi; //此時為Pi分配內存,以后不再分配!
  double I=PI; //編譯期間進行宏替換,分配內存
  double j=Pi; //沒有內存分配
  double J=PI; //再進行宏替換,又一次分配內存!
  const定義常量從匯編的角度來看,只是給出了對應的內存地址,而不是像#define一樣給出的是立即數,所以,const定義的常量在程序運行過程中只有一份拷貝,而#define定義的常量在內存中有若干份拷貝。
(6) 提高了效率。
  編譯器通常不為普通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

 


免責聲明!

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



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