ES6ブロックレベルスコープの詳細
- ES5では、グローバルスコープと関数スコープのみがあり、ブロックレベルのスコープはありません。実際にJavaScriptにブロックレベルのスコープを追加しましょう。
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n);
}
f1(); //5
上記のコードには2つのコードブロックがあり、どちらも変数nを宣言していますが、出力結果は5であり、外側のコードブロックが内側のコードブロックの影響を受けないことを示していますが、varを使用すると、出力結果は10になります。
function f2() {
var n = 5;
if (true) {
var n = 10;
}
console.log(n);
}
f2(); //10
- ES6では、ブロックレベルのスコープを任意にネストできます。外部スコープは内部スコープの変数にアクセスできませんが、内部スコープは外部スコープで同じ名前の変数を定義できます。
{
{
let n = 10;
}
console.log(n);//Error,不能在变量所在的块级作用域之外访问此变量
}
- ブロックレベルスコープの出現により、無名関数(IIFE)の即時実行は不要になりました
(function() {
var temp;
}());
{
let temp;
}
//上述立即执行匿名函数与let所在代码块的作用都是一样的,都是在块级作用域中声明变量temp
ES6ではブロックレベルスコープが導入されています。これにより、関数をブロックレベルスコープで宣言できるようになります。関数宣言ステートメントはletのように動作し、ブロックレベルスコープの外部で参照することはできません。ブロックでは回避する必要があります。レベルスコープ。関数が機能しない場合は、関数宣言ステートメントの代わりに関数式の形式を使用します。宣言された関数は、ブロックレベルスコープ内で中括弧内にのみ配置できます。