變量的聲明關鍵字
var
與let
和swift
很像,但是考慮到語言先后的時間swift
是在模仿js
,在swift
語言中可以根據編譯器自動判斷變量的數據類型,而在js
中也完全不用管數據類型,直接使用就好。
var:
var
在js
的語法的ES5
規(guī)范中并沒有塊級作用域的說法,這一點有區(qū)別于其他語言,所以在一段代碼中如果聲明了var
變量那么這個變量就是全局的在if
...else
的判斷{}
中與for
循環(huán)中var
所聲明的變量也是全局的。
var
的變量提升,在js的語言中因為變量和函數的變量提升,所以可以先調用,后聲明如下:
// 這個時候輸出的是undefined,表示的是一個未初始化的空值,在其他語言中有可能就直接找不到這個變量而報錯了。
console.log(a);
var a = 20;
但是在其他部分語言中是不可以先使用后聲明的包括ES6
中新聲明的let
也不可以所以不建議利用變量提升的寫法,盡量先聲明在使用。
var
聲明的變量屬于全局變量,會掛載到window
上。
let:
let
關鍵字是ES6
中新出現的,在swift
中var
是變量而let
是常量。
在js
中 let
在一段代碼中只可以出現一次,而所謂的一段代碼就是一個{}
,在一個{}
中let
一旦出現,它所聲明的變量就只可以有一份,不允許變量提升,也不可以重復聲明(形參同變量名也不可以),并且在{}
作用域消失后,let的變量釋放,即外部作用域不可以訪問內部作用域的值。
let
聲明的變量屬于局部變量,不會掛載到window
上。
const:
第一次接觸const
是在C
語言中,JS
的const
用法與C
基本相同。
const
作用是修飾的變量值本身不可以被改變,值得注意的是變量中如果儲存的是復雜數據類型如對象,那么變量本身所儲存的是變量的地址,地址不可以改變但是地址內所儲存的數據掛載的屬性是可以改變的。代碼如下:
const a = "張三";
a = "李四"; // 這個時候 會報錯 因為a的值不可以修改.
const obj = new Object();
obj.name = "object"; // 可以修改 因為const所修飾變量obj本身的地址沒有改變
const
基本與let
使用方式相同。
總結:
var
當需要用到全局變量的時候使用。
let
需要局部變量的時候使用。
const
定義一個值不允許改變的時候使用。
在代碼塊中盡可能的使用let
,變量與函數盡可能的先聲明在調用。