js中六種宣告變數的方式
阿新 • • 發佈:2022-03-26
var
在ES5階段中,使用var具有以下特點:
(1)沒有塊的概念,可以跨塊訪問,不能誇函式訪問;
(2)存在變數提升,賦值不提升 (undefined)
let
在ES6階段新增,新增出塊的概念,新增塊級作用域,具有以下特點:
(1)let宣告的變數只在它所在的程式碼塊有效;
(2)let不會出現變數提升,需先聲明後使用,否則會報錯;
(3)暫存性死區,在程式碼塊內,使用let使用變數之前,該變數都是不可用的;
(4)不允許重複宣告
const
用於宣告一個只讀的常量,具有以下特點:
(1)一旦宣告就必須立即初始化;
(2)一旦宣告,常量值就不能改變(指的是記憶體地址不能改變,但指向的資料結構不受控制;通過 Object.freeze() 方法,使物件的原始屬性不可變, 但仍然可以更改巢狀物件);
(3)塊作用域內有效;
(4)不存在變數提升;
(5)存在暫時性死區;
function
用於定義一個函式,具有以下特點:
(1)函式聲明後 需要呼叫的時候 才能執行;
(2)對支援ES5和ES6的瀏覽器環境在塊作用域內有一定區別,所以應避免在塊級作用域內宣告函式。
class
ES6引入了class關鍵字,用來定義類。該寫法相比於物件原型的 方式具有以下特點:
(1)相比於物件原型的方式寫法更清晰;
(2)更像面向物件程式設計的語法(方便)
```JavaScript
class Calculate {
constructor(x, y) {
this.x = x;
this.y = y;
}
add() {
return this.x + this.y;
}
}
```
import
用於載入模組,然後輸出變數,具有以下特點:
(1)import 命令接受一對大括號,其裡面的變數名必須與被匯入的模組對外介面的名稱相同;
(2)用 as 關鍵字可將輸入的變數名重新命名;
(3)import 命令輸入的變數都是隻讀的;
(4)import 命令具有提升效果,會提升到整個模組的頭部,首先執行(因為import命令實在編譯階段執行的,在程式碼執行之前);
(5)import 是靜態執行,不能使用表示式和變數;
(6)import 會執行所載入的模組