為什么javascript中有那么多宣告變數的方式,明明是弱型別的語言,確有三個關鍵字?
最早的是var,這是es6之前的宣告方式,既然有了var為什么還要有let 和 const呢?
原因很簡單,這是因為var有一些問題不夠方便,
首先是作用域,在一個函式內只要宣告一個var,內部可以任意呼叫,比如創建一個for回圈使用var和let的效果,
作用域的區別
- var宣告之后函式內所有的都可以呼叫他 (var只有全域作用域和函式作用域沒有塊級作用域)
- let只會在塊級作用域 呼叫會報錯()
function 作用域(){
for (var var1 = 0; var1 < 1; var1++) {
console.log("var",var1)
}
for (let let1 = 0; let1 < array.length; let1++) {
console.log("let",let1)
}
}
function print_one(){
if(true){
var one = 1;
}
console.log(one); //1
}
console.log(one);//not definde
function print_one(){
if(true){
let one = 1;
}
console.log(one); //not definde
}
console.log(one);//not definde
變數的宣告提升
- var 可以在宣告陳述句前呼叫
- let 必須宣告之后才能呼叫
- 出現這樣的問題,是因為代碼通過js的解釋器的預編譯,這個操作會優先掃描所有的代碼吧變數宣告陳述句提取到所有代碼執行之前,而賦值陳述句保持位置不便從而導致
if(false){
var one = 1;
}
// 應該報錯 但是居然能列印出來
console.log(one) // undefinde
// 實際上相當于這樣
var one
if(false){
one = 1;
}
// 應該報錯 但是居然能列印出來
console.log(one) // undefinde
重復宣告
- var可以重復宣告
- let 不能在統一作用域下重復宣告
- const 宣告的時候就必須要賦值,否則報錯 同時也不能在同一作用域下重復宣告
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/502743.html
標籤:JavaScript
