今天就來聊聊es6常量的宣告方式。
在es5中定義乙個常量:
object.
defineproperty
(window,
'pi',)
console.
log(pi)
5console.
log(pi)
在es6中定義乙個常量
//典型報錯
const a=5a=
6//報錯,常量不可以改變
const b//報錯,常量必須賦初始值b=6
//const宣告的陣列、物件的值可以被改變,不能改變的是變數的引用位址
const obj=
console.
log(obj)
'gdut'
obj.name=
'www'
console.
log(obj)
//const arr=[1
,2,3
]arr.
push(4
)console.
log(arr)
//[1,2,3,4]
//要是想固定值不變,可以用object.freeze()凍結
const obj=
}console.
log(obj)
//}object.
freeze
(obj)
//freeze只能傳物件不能傳陣列 做淺層凍結
object.
freeze
(obj.skill)
//手動遞迴凍結第二層
obj.school=
'gdut'
obj.skill.year=
12console.
log(obj)
//}
常見的作用域分為以下幾個型別:
物件型別
window/global
全域性作用域
function
函式作用域/區域性作用域
{}塊狀作用域
this
動態作用域
更多關於作用域建議閱讀(.
const宣告的塊級作用域:
if
(true
)console.
log(a)
//報錯 a未定義 a僅在塊級作用域有效
先來看看什麼叫變數提公升。
var 宣告的變數會在任意**執行前處理,這意味著在任意地方宣告變數都等同於在作用域頂部宣告——即宣告提公升(可以在宣告語句之前使用)。
console.
log(a)
//undefine (列印出undefined而不是報錯,可見var存在變數提公升)
var a =
5//相當於
// var a
// console.log(a)
// a=5
function
foo(
)foo()
//undefined
//相當於
//function foo()
//foo()
const宣告的常量不存在變數提公升
if
(true
)
es6的常量的宣告
在 es6 中里也可以使用 const 語法進行宣告。使用 const 宣告的變數會被認為是常量 constant 意味著它們的值在被設定完成後就不能再被改變。正因為如此,所有的 const 變數都需要在宣告時進行初始化,示例如下 有效的常量 const maxitems 30 語法錯誤 未進行初始...
ES6 變數 常量宣告總結
較之前es5,新版本在宣告上有改變,現根據文件教程,總結下不同之處,時長溫習。let只在命令所在的 塊 裡有效 es5只有全域性作用域和函式作用域,沒有塊級作用域,帶來很多不合理的場景,比如 第一種場景,內層變數可能會覆蓋外層變數。var tmp new date function f f unde...
ES6 變數宣告方式
var,function,let,const,import,class1.let只在所在的 塊中有效 2.以前我們需要用iife解決的問題 3.不存在變數宣告提公升 4.暫時性死區tdz 1.let只在所在的 塊中有效 2.以前我們需要用iife解決的問題 3.不存在變數宣告提公升 console....