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