ES6基礎
一、塊級作用域
1. var
首先看看ES5中得變數宣告方式
if (true) { var a = 2 } console.log(a) // 2
以上程式碼等同於
var a if (true) { a = 2 } console.log(a)
以上可知 :
- 在塊內部定義變數 變數提升,到函式最頂部
- 通過var宣告的變數,無論在何處宣告,均為全域性作用域
2.let 和 const
再來看看ES6
中的let
和const
let
if (true) { let b = 2 } console.log(b) // b is not defined
此時在{} 外部訪問b 將會報錯,因為 let 的作用域僅為{ }
的內部,及塊級作用域
const
if (true) { const c = 2 } console.log(c) // c is not defined
const的作用域與let作用域相同:只在宣告所在的塊級作用域內有效
讓我們看看const 更多的特性:
const 表示常量:
const d = 2 d = 3 // Assignment to constant variable.
此時,當 d 為基本資料型別 的時候,改變其值,將會報錯!!!
但是它的常量僅僅表示的是地址常量 物件的成員可以改變值
看看下面的例子:
const people = {name: '張三', age: 23} people.age = 25 console.log(people) // {name: "張三", age: 25}
看看此時
people
已經被改變了
why?
物件是複雜的資料型別 它的地址儲存在 棧裡面, 值儲存在堆裡面
cosnt僅僅是保證這個地址不改變,至於地址對應的資料,是可以進行改變的
基本型別值在記憶體中佔據固定大小的空間 因此被儲存在棧記憶體中。比如 const a = 1 ; 這時候其直接儲存在棧裡面