var 、 let 和 和 const 區別及實現原理


區別:

  • var和let用以變量聲明常量,const用於聲明只讀常量;
  • var聲明的變量,不存在快級作用域,在全局范圍內都有效,let和const聲明的,只在它所在的代碼塊內有效;
  • let和const不想var存在變量提升現象,所以var定義的變量可以先使用后聲明,let和const只能先聲明后使用;
  • let聲明的變量存在暫時性死區,即只要塊級作用域中存在let,那么它聲明的變量就綁定了這個區域,不再受外部的影響;
  • let不允許在相同作用域內聲明同一個變量;
  • const在聲明變量時必須初始化賦值,一旦聲明,其聲明的值就不允許改變,更不允許重復聲明,如const聲明了一個復合類型的常量,其存儲的是一個引用地址,不允許改變的是這個地址,而對象本事是可變的;

變量與內存之間的關系,主要由三個部分組成:

  • 變量名
  • 內存地址
  • 內存空間
  JS 引擎在讀取變量時,先找到變量綁定的內存地址,然后找到地址所指向的內存空間,最后讀取其中的內容。當變量改變時,JS 引擎不會用新值覆蓋之前舊值的內存空間(雖然從寫代碼的角度來看,確實像是被覆蓋掉了),而是重新分配一個新的內存空間來存儲新值,並將新的內存地址與變量進行綁定,JS 引擎會在合適的時機進行 GC,回收舊的內存空間。const 定義變量(常量)后,變量名與內存地址之間建立了一種不可變的綁定關系,阻隔變量地址被改變,當 const 定義的變量進行重新賦值時,根據前面的論述,JS 引擎會嘗試重新分配新的內存空間,所以會被拒絕,便會拋出異常。


免責聲明!

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



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