菜鳥は先端を見る(var、let、constの違い)

10235 ワード

JavaScriptでlet、const、varの違い
1.変数の昇格
var宣言の変数には変数が存在します.変数は宣言の前にundefinedとして呼び出されます.
console.log(a) //   undefined
var a = 10;
letおよびcontには変数の昇格が存在しません.宣言された変数は必ず声明の後に使用されます.そうでなければエラーを報告します.
console.log(b); // ReferenceError
let b = 10;


console.log(c) // ReferrnceError
const c = 10
2.一時死区
letとconatに一時的なデッドエリアがあります.ブロックレベルのスコープ内にletコマンドが存在する限り、その宣言した変数はこのエリアにバインドされ、外部の影響を受けません.
if(true){
     
// var         ,         
var a = 10;  // var          window.a = 10
}
console.log(a); // 10

if(true){
     
//      ,let               
let b = 10; // const b = 10     
}
console.log(b)  //   
//es6var,let,const.html:87 Uncaught ReferenceError: b is not defined
//at es6var,let,const.html:87
3.変数の繰り返し宣言
varは変数constとletを繰り返し宣言することができます.同じスコープで変数を繰り返し宣言することは許されません.
var a = 10;
var a = 20;
console.log(a) // 20

let b = 10;
let b = 20;
console.log(b) //   
//Uncaught SyntaxError: Identifier 'a' has already been declare
const c = 10;
const c = 20; //   
//Uncaught SyntaxError: Identifier 'c' has already been declared
ブロックレベルのスコープ
varには、ブロックレベルの作用領域letとconstが存在しない.ブロックレベルの機能領域es 6にブロックレベルの作用領域が追加され、ブロックレベルの作用領域はReferenceErrorによって含まれ、{}およびif文のforもブロックレベルの作用領域に属する.
     var arr = [1,2,3,4]

        for(var i = 0;i < arr.length; i++){
     
            setTimeout(function(){
     
                console.log(i)  // 4 4 4 4
            },100)
        }

     var arr = [1,2,3,4]

        for(let i = 0;i < arr.length; i++){
     
            setTimeout(function(){
     
                console.log(i)  // 0 1 2 3
            },100)
        }
宣言の変数を変更
varとletは声明の変数constを修正して読み取り専用の定数を宣言することができます.一度声明したら定数の値は変更できません.const宣言の変数は値を変更してはいけません.これは、constが変数を宣言すると、すぐに初期化しなければならないことを意味しています.今後の割り当てには残してはいけません.
     const a = 10;
      a = 20
     console.log(a) //    
     //Uncaught TypeError: Assignment to constant variable.
    //at es6var,let,const.html:111
    
	// let         
	 let a = 10;
     a = 20
    console.log(a) // 20
    
	//var          
	var a = 10;
	a = 20;
	console.log(a) // 20