【JavaScript】var letとconstの違い
2617 ワード
1.var
var:JS変数を宣言します.
値を持たない変数は、デフォルトはundefinedです.
es 2015導入:letとconstは、JSにブロックスコープと定数を提供する.
2.let:
同じ点:変数を宣言して、関数のスコープ、大域のスコープでvarと通用することができます.
違い点:
1)循環作用域
var ループ外の変数を再宣言し、let ありません
var:プログラムのどの位置でもJS変数を再宣言することができます.
let:同じスコープまたはブロックにおいて、一つのvarまたはlet変数を再宣言することも、varを通じて一つのlet変数を再宣言することも許されない.異なる作用領域またはブロックにおいてのみ、変数をletで再宣言することができます.
通過する var 宣言された変数は一番上に移動します.letとconstはできません.声明の前では使えません.
1)宣言時に値を賦課しなければならず、また新たに値を賦与することはできない.
2)ブロックのスコープ内で再宣言しない.
同じスコープは許可されていません.
ヽoo.....................................................
グローバルスコープ:関数以外で宣言された変数は、JSプログラムのどこにでもアクセスできます.
関数のスコープ:関数内で宣言された変数は、宣言された関数内でのみアクセスできます.
ブロック作用領域:ブロック{}内で宣言された変数は、let宣言を使用してブロック外からアクセスできません.
萼向上(Hoisting)
関数宣言と変数宣言は、常にインタプリタによって方法体の最上部に“昇格”されます.
scriptタグに出会うとjsは事前解析を行い、変数varとfunction声明をアップグレードしますが、functionは実行されません.varとfunctionがない限り、コンテキストを実行します.
宣言された変数だけが向上し、初期化されません.
var:JS変数を宣言します.
値を持たない変数は、デフォルトはundefinedです.
es 2015導入:letとconstは、JSにブロックスコープと定数を提供する.
2.let:
同じ点:変数を宣言して、関数のスコープ、大域のスコープでvarと通用することができます.
違い点:
1)循環作用域
var ループ外の変数を再宣言し、let ありません
var i = 7;
for (var i = 0; i < 10; i++) {// i
//
}
// ,i 10
let i = 7;
for (let i = 0; i < 10; i++) {// i
//
}
// i 7
2)HTMLにおけるグローバル変数var carName = "porsche"; // window :
let carName = "porsche"; // window :
3)改めて声明するvar:プログラムのどの位置でもJS変数を再宣言することができます.
let:同じスコープまたはブロックにおいて、一つのvarまたはlet変数を再宣言することも、varを通じて一つのlet変数を再宣言することも許されない.異なる作用領域またはブロックにおいてのみ、変数をletで再宣言することができます.
//var
var x = 10;// ,x 10
var x = 6; // ,x 6
// , let var let
// var let
var x = 10; //
let x = 6; //
{
var x = 10; //
let x = 6; //
}
// , let :
let x = 6; //
{
let x = 7; //
}
4)変数の昇格通過する var 宣言された変数は一番上に移動します.letとconstはできません.声明の前では使えません.
// , carName
var carName;
3.const:1)宣言時に値を賦課しなければならず、また新たに値を賦与することはできない.
2)ブロックのスコープ内で再宣言しない.
var x = 10;
// ,x 10
{
const x = 6;
// ,x 6
}
// ,x 10
3)オブジェクトの定数値が定義されていません.値に対する定数参照が定義されています.したがって、定数オブジェクトの属性は変更できますが、定数の元の値は変更できません.// const :
const car = {type:"porsche", model:"911", color:"Black"};
// :
car.color = "White";
// :
car = {type:"Volvo", model:"XC60", color:"White"}; // ERROR
4)定数配列は変更できます.const cars = ["Audi", "BMW", "porsche"];
// :
cars[0] = "Honda";
// :
cars.push("Volvo");
5)改めて声明する同じスコープは許可されていません.
// , let :
let x = 6; //
{
let x = 7; //
}
ヽoo.....................................................
グローバルスコープ:関数以外で宣言された変数は、JSプログラムのどこにでもアクセスできます.
関数のスコープ:関数内で宣言された変数は、宣言された関数内でのみアクセスできます.
ブロック作用領域:ブロック{}内で宣言された変数は、let宣言を使用してブロック外からアクセスできません.
萼向上(Hoisting)
関数宣言と変数宣言は、常にインタプリタによって方法体の最上部に“昇格”されます.
scriptタグに出会うとjsは事前解析を行い、変数varとfunction声明をアップグレードしますが、functionは実行されません.varとfunctionがない限り、コンテキストを実行します.
宣言された変数だけが向上し、初期化されません.
var x = 5; // x
elem = document.getElementById("demo"); //
elem.innerHTML = x + " " + y; // x undefined
var y = 7; // y