Js基本——變量聲明 var let const

Js的變量特性是鬆懈型,就是說值跟範例是沒有關係的,變量只是一個存值的佔位符,不會依據初始化存入的值範例,給變量設置特定的範例,所以變量在初始化后,能夠在轉變值的同時轉變值範例。而聲明一個變量,假如沒有顯著的賦值操縱,那末默以為賦值undefined
Js中有三種變量聲明的體式格局:var ,let和const。而這后兩種聲明體式格局,是在es6里才湧現的。他們能夠說是填補var在變量聲明的遺憾,處理了在運用過程中湧現的一些問題

var聲明
var的特性以下:

  1. 作用域局限為關閉的全局函數或是部分函數
  2. 同一個作用域里反覆聲明同名變量,不會報錯
  3. 在嵌套的子函數里,從新聲明外層函數中同名的變量,不會轉變外層函數中變量的值
  4. 變量能夠提拔到全局代碼或是函數頂端實行,所以打印變量值能夠在謄寫聲明變量之前實行,也不會報錯,而賦值只要比及實行到賦值那一句才會實行
  5. 沒有聲明的變量,會被隱式建立為全局變量,即全局對象的屬性(獨佔)
    非聲明的變量,只要在賦值的時刻才會被建立
    非聲明的變量,由於是全局對象的屬性,所以能夠用delete刪除

栗子?
《Js基本——變量聲明 var let const》這個例子申明非聲明的變量,變成全局對象的屬性,能夠delete刪除

let聲明
let聲明變量又稱更準確的var,重要運用於塊作用域,也就是if for switch以及{}如許的塊里,能夠湧現在它本身聲明地點的塊和它包括的子塊里。
它有如許的特性:

  1. 在同一個塊作用域里,從新聲明一個同名變量,會報錯
  2. 在嵌套中的子塊作用域里,從新聲明一個與外層塊作用域雷同的同名變量,不會保存外層塊的變量值,由於屬於差別的變量作用域
  3. 沒有提拔作用,所以在變量聲明之前運用會報錯,這一個徵象,也稱為:暫存死區
  4. 不能作用全局對象的屬性

運用:由於能夠是塊作用域,所以let的湧現,能夠替代馬上實行函數
栗子?
《Js基本——變量聲明 var let const》這個例子申明,var能夠提拔變量聲明,然則let不能夠
《Js基本——變量聲明 var let const》這個例子申明,同名的變量子塊中的變量跟外層塊中的變量,是差別的兩個變量

《Js基本——變量聲明 var let const》這個例子申明,即便是有全局變量,然則在塊的作用域里,有let聲明的同名作用域起作用,而且在聲明之前不可用
《Js基本——變量聲明 var let const》這個例子申明,不能用let聲明跟參數同名的變量
《Js基本——變量聲明 var let const》這個例子申明,let的運用,替換了馬上實行函數

const聲明
const也有let的特性3和4,也是一個塊作用域的變量聲明體式格局,除此以外另有本身的特性

  1. 必須在聲明的同時賦值初始值
  2. 一旦賦值就不能轉變,而且聲明的變量通常是常量,用大寫示意
  3. 也是由於2的緣由,所以不能作為for輪迴的輪迴變量

栗子?
《Js基本——變量聲明 var let const》這個例子申明const不能作為for輪迴的變量
《Js基本——變量聲明 var let const》這個例子申明const聲明的變量賦值后不能改,只是同名變量不能再賦值,然則能夠給變量的屬性賦值

末了來個小總結:
var嘛,能用let的時刻就不必var,比如用let的很好的場景:for的輪迴變量,能夠保證每一次輪迴都是一個新變量,而不是用var時刻的同一個變量,if或是switch內里,然則注重一種狀況就是let x = x + 1這個時刻是會報錯的,由於也是犯了未聲明就運用的錯,賦值操縱是從右到左的,也就是說會先計算好右側的值,才會把終究效果賦值給左側。函數的參數不要用let聲明,
const嘛,就用來聲明常量,或是不轉變初值的變量

參考資料:https://developer.mozilla.org…
https://developer.mozilla.org…
https://developer.mozilla.org…
http://voidcanvas.com/es6-var…
let 和 const 敕令
Let It Be – How to declare JavaScript variables
深入淺出ES6:let和const

    原文作者:enggirl
    原文地址: https://segmentfault.com/a/1190000014400088
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞