菜鳥は先端を見る(var、let、constの違い)
10235 ワード
JavaScriptでlet、const、varの違い
1.変数の昇格
var宣言の変数には変数が存在します.変数は宣言の前にundefinedとして呼び出されます.
letとconatに一時的なデッドエリアがあります.ブロックレベルのスコープ内にletコマンドが存在する限り、その宣言した変数はこのエリアにバインドされ、外部の影響を受けません.
varは変数constとletを繰り返し宣言することができます.同じスコープで変数を繰り返し宣言することは許されません.
varには、ブロックレベルの作用領域letとconstが存在しない.ブロックレベルの機能領域es 6にブロックレベルの作用領域が追加され、ブロックレベルの作用領域は
varとletは声明の変数constを修正して読み取り専用の定数を宣言することができます.一度声明したら定数の値は変更できません.const宣言の変数は値を変更してはいけません.これは、constが変数を宣言すると、すぐに初期化しなければならないことを意味しています.今後の割り当てには残してはいけません.
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