JS學習筆記(三)變量聲明方式

變量聲明方式有 let和var,聲明常量使用 const。es6

let

基本用法

用法相似於var,用來聲明變量,可是所聲明的變量只在let命令的代碼塊內有效。數組

{
  let a = 10;
}
複製代碼

在for循環中使用let聲明 計數器

for循環中的計數器就很合適使用let命令。安全

for (let i = 0;i < 10; i++) {
  // ...
}
console.log(i)
複製代碼

計數器i只在for循環體內有效,在循環體外引用就會報錯。 此外,設置循環變量的那部分是一個父做用域,而循環體內部是一個單獨的子做用域。bash

let命令不存在變量提高

變量提高只發生在「變量提高」現象,即變量能夠在聲明以前使用,值爲undefined。 let聲明的變量必定要在聲明以後使用,不然會報錯。數據結構

變量提高 參照:函數

暫時性死區

只要塊級做用域內存在let命令,它所聲明的變量就"綁定"在這個區域了。再也不受外界的影響。 ES6規定,若是區塊中出現let和const命令,這個區塊對這些命令聲明的變量,從一開始就造成了封閉做用域。凡是在聲明以前使用這些變量,就會報錯。 這在語法上,稱爲暫時性死區ui

if(true) {
//TDZ開始
  tmp = 'abc'
  console.log(temp)//ReferenceError
  let tmp;//TDZ結束
  console.log(tmp)//undefined
  tmp =123;
  console.log(tmp)//123
}
複製代碼

暫時性死區對 typeof的影響 意味着typeof也不是一個百分百安全的操做。 沒有let以前,typeof運算符是永遠不會報錯的,可是如今使用typeof檢測未被聲明的變量會報ReferenceError。spa

不容許重複聲明

let不容許在相同做用域內,重複聲明同一個變量。指針

{
  let a= 1;
  let a= 2;//報錯
}
複製代碼

所以 不能在函數內部從新聲明參數code

const

const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。 const一旦聲明變量,就必須當即初始化,不能留到之後賦值。 只聲明,不賦值,就會報錯,報語法錯誤SyntaxError。

const聲明的常量特色

  • 聲明以後必須立刻賦值
  • 不存在變量提高
  • 存在暫時性死區 只能在聲明以後的位置才能使用
  • 不可重複聲明

const聲明的本質

const實際上,保證的並非變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。 對於簡單類型得數據(數值,字符串,布爾值),值就保存在變量指向的那個內存地址,所以等同於常量。 可是對於複雜類型的數據(對象和數組),變量指向的內存地址,保存的只是一個指向實際數據的指針,至於它指向的數據結構是否是可變的,就不能控制的。只是保證這個指針(地址)不變。

參考連接

es6.ruanyifeng.com/

相關文章
相關標籤/搜索