ES6の研究ノート:ブロックレベルのスコープ
スコープカテゴリー
- グローバルスコープ
- ローカルスコープ
ブロックレベルのスコープ
グローバルスコープの例
var i=2;
for (var i = 0; i < 10; i++) {
}
console.log(i);//10
- ここでは、そのような理由がオフに可変リフトによって引き起こされる意図しない結果、ありました
例ローカルスコープ
!(function () {
console.log(b);//undefined
var b = 2;
})()
- なぜ出力は、エラーではなく、未定義?
- このような結果は、上記次のコードと同等生じ、予期しない可変リフトです。
!(function () {
var b;
console.log(b);//undefined
b=2;
})()
ここでは、質問から放り出され、可変リフトは何ですか?
JavaScriptのは、関数や変数の宣言は、最上位の機能に昇格されます。
JavaScriptは、変数が使用後に宣言することができ、つまり、変数が再び使用する前に宣言することができます。
ES6はブロックレベルのスコープの概念が導入されました
//块级作用域使用方式
{
//...code
}
注:使用して変数宣言するVARをブロックレベルの範囲の制限からは、変数はまだ改善をもたらし、したがって
我々は2つの新しい変数を導入します
- てみましょう
- 使用法:変数を宣言
- 特徴:
- 唯一の有効なブロックの宣言
- これは、同じスコープで宣言を繰り返すことはできません
- いいえ、可変リフトありません
- 一時的なデッドゾーン
- CONST
- 使用方法:読み取り専用変数を宣言(定数として理解されます)
- 特徴:と同じことをしましょう
- 注意事項:
- 変数の宣言は、ただちに対応する必要がありますが
- 声明は不変変数、データ値の単純型であります
エッセンス:保存されたデータのメモリ・アドレスを指すように、その変数を確保するためには、変更を許可していません
複雑なオブジェクトの種類、配列、関数、それはconstの複合型オブジェクト宣言されたときに注意が必要な単純な文字列型、数値、ブール、
使用例
- 例1
if(true){
var a=10;
}
console.log(a);//10
- 例2
if(true){
let a=10;
}
console.log(a);//error: a is not defined
- 例3
{
let a=2;
}
{
let a=3;
console.log(a);//3
}
- 例4
{
const a=2;
console.log(a);//2
a = 3;//error:"a" is read-only
}
- 例5
{
const obj={
name:'小明',
age:18
}
console.log(obj);//{name:"小明",age:18}
obj.name="小红";
console.log(obj);//{name:"小红",age:18}
}