ES 6定義変数
2591 ワード
一、letコマンド変数のアップグレードは存在しません.es 5の 一時的なデッドゾーン.ブロックレベルの役割ドメイン内に は、繰り返し宣言を許可しません.
二、ブロックレベルの作用領域 es 5にはグローバル役割ドメインと関数役割ドメインしかなく、ブロックレベルの役割ドメインはありません.これは多くの不合理なシーンを引き起こす可能性があります. es 6のブロックレベル役割ドメイン es 6は、ブロックレベルの役割ドメインの任意のネストを可能にし、ブロックレベルの役割ドメインの出現は、グローバル変数でない限り、広く適用されている即時実行関数式(IIFE)が不要になる.
三、constコマンド
四、最上位オブジェクト属性とグローバル変数最上位オブジェクト、ブラウザ環境では es 6に導入された
var
には変数リフトの問題があるが、es 6のlet
およびconst
には変数リフトの問題はない.let
コマンドが存在する限り、宣言された変数はこの領域にバインドされ、外部の影響を受けません.Es 6は、ブロックにlet
およびconst
の命令が存在する場合、このブロックがこれらの命令に対して宣言する変数は、最初から閉鎖的な役割ドメインを形成し、宣言前にこれらの変数を使用すると、エラーを報告することを明確に規定している.typeof
を使っても間違えます.var tmp = 123;
if(true){
tmp = "abc"; //ReferenceError tmp is not defined
let tmp;
}
let
およびconst
は、同じ役割ドメイン内で同じ変数を繰り返し宣言することを許さない.//
function func() {
let a = 10;
var a = 1;
}
//
function func() {
let a = 10;
let a = 1;
}
//
function func(arg) {
let arg; //
}
function func(arg) {
{
let arg; //
}
}
二、ブロックレベルの作用領域
//
var tmp = 123;
function f() {
console.log(tmp);
if (false) {
var tmp = 'hello world';
}
}
f(); // undefined
//
var s = 'hello';
for (var i = 0; i < s.length; i++) {
console.log(s[i]);
}
console.log(i); // 5
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
// IIFE
(function () {
var tmp = ...;
...
}());
//
{
let tmp = ...;
...
}
三、constコマンド
const
は読み取り専用の定数を宣言し、いったん宣言すると定数の値は変更できません.const
変数が宣言されると、すぐに初期化する必要があり、後で値を割り当てることはできません.const
は、付与動作を規定する.const a = 1;
a = 2;//
const arr = [];
arr.push(1) //[1]
// ,const , 。
arr = [];// 。 arr 。
四、最上位オブジェクト属性とグローバル変数
window
オブジェクト、nodeではglobal
オブジェクトを指します.ES 5では,最上位オブジェクトの属性はグローバル変数と等価である.window.a = 1;
a // 1
a = 2;
window.a // 2
let
、const
、class
によって宣言されたグローバル変数は、最上位オブジェクトの属性ではありません.しかし、var
、function
で宣言された変数は依然としてグローバルオブジェクトの属性に属している.var a = 1;
window.a // 1
let b = 1;
window.b // undefined