隨著js的發展,目前共6種宣告變數的方式,分別為var,let,const,function,class,import,下面分別闡述一下這六種方式,
1 var
在ES5階段,用var定義變數,此階段具有以下特點 :
1. 沒有塊的概念,可以跨塊訪問,不能跨函式訪問;
2. 存在變數提升,
// 代碼沒報錯,而是列印出來了undefined,側面說明了val變數存在變數提升
console.log(val); // undefined
var val = 1;
console.log(val); // 1
2 let
在ES6階段,出現了塊大概念,新增了塊級作用域,同時新增了let命令,let宣告大變數具有以下特點:
1. let宣告的變數只在它所在的代碼塊有效;
2. 不存在變數提升,let不會像var那樣會發生 變數提升 現象,因此,變數需要先宣告后再使用,否則會報錯;
3. 暫時性死區,在代碼塊內,使用let命令宣告變數之前,該變數都是不可用的;
4. 不允許重復宣告,
// 只在所在的代碼塊有效
{
let val = 1;
console.log(val); // 2
}
{
let val = 2;
}
console.log(val); // val is not defined
// 不存在變數提升
{
console.log(val); // 報錯
let val = 2;
}
// 不允許重復宣告
{
let val = 1;
let val = 2; // Identifier 'val' has already been declared
}
3 const
在let命令出現的同時,出現了const命令,其用于宣告一個只讀的常量,具有以下的特點:
1. 一旦宣告就必須立即初始化;
2. 一旦宣告,常量值就不能改變了(指的是記憶體地址不能改變);
3. 塊作用域內有效;
4. 不存在變數提升;
5. 存在暫時性死去,
4 function
function命令用于定義一個函式,具有以下特點:
1. 函式宣告后不會立即執行,需要呼叫的時候才知曉;
2. 對支持ES5和ES6瀏覽器環境在作用域內有一定區別,所以應避免在塊作用域內宣告函式,
function test() {
// ,,,
}
5 class
ES6語法引入了class關鍵字,用來定義類,該寫法相比于物件原型的方式具有以下特點:
1. 相比于物件原型的方式寫法更清晰;
2. 更像面向物件編程的語法;
class Calculate {
constructor(x,y){
this.x = x;
this.y = y;
}
}
add (){
return this.x + this.y;
}
6 import
ES6在語言標準的層面上實作了模塊功能,其中import命令就是用于加載模塊,然后輸出變數,其具有以下特點:
1. import命令接受一對大括號,其里面的變數名必須與被匯入的模塊對外的名稱相同;
2. 用as關鍵字可將輸入的變數名重名;
3. import命令輸入的變數都是只讀的;
4. import命令具有提升效果,會提升到整個模塊的頭部,首先執行(因為import命令是在編輯階段執行的,在代碼運行之前);
5. import是靜態執行,不能使用運算式和變數;
6. import會執行所加載的模塊
import { add } from "./calcluate";
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/353417.html
標籤:其他
