1. 程式人生 > 程式設計 >JavaScript ES新特性塊級作用域

JavaScript ES新特性塊級作用域

目錄
  • 1.塊級作用域是什麼
  • 2.為什麼需要塊級作用域
  • 3.與函式宣告

前言:

在學習塊級作用域之前需要我們對作用域有個瞭解,所謂的作用域就是程式碼當中的某個成員起作用的範圍。

1.塊級作用域是什麼

所謂的塊級作用域,就是該變數只能在宣告時的程式碼塊或者子程式碼塊中使用。在ECMAScript 2015以前的版本中是不存在塊級作用域的,而ECMAScript 2015提供的let關鍵字,使出現了塊級作用域,示例程式碼如下所示

/*
 * 塊級作用域只能使用 let 關鍵字
 * let關鍵字不僅可以宣告塊級作用域, 還可以用在全域性作用域和函式作用域
 */
// 全域性作用域
let a = 100; // 全域性變數
(function () {
  // 函式作用域
  let b = 200; // 區域性變數
})()
if (true) {
  // 塊級作用域
  let c = 300; // 區域性變數
}
consoleRxcQU
.log(a); // 100 console.log(b); // 丟擲異常 console.log(c); // 丟擲異常

2.為什麼需要塊級作用域

ECMAScript 5只存在全域性作用域和函式作用域,沒有塊級作用域。這種情況出現一些問題:

區域性變數可能會覆蓋全域性變數

var v = 100;
(function(){
  console.log(vwww.cppcns.com); // undefined 
  var v = 200;
})


在迴圈體中用於計數的變數洩露為全域性變數

// 定義一個迴圈體
for (vawww.cppcns.comr v = 0; v < 10; v++) {
  console.log("這是一個 for 迴圈"); // 這是一個 for 迴圈 * 10
}
console.log(v); // 10

在迴圈完畢之後如果不手動釋放此變數,其生命週期跟隨此生存,佔用記憶體。

3.與函式宣告

ECMAScript5標準規定函式的宣告只能在全域性作用域和函式作用域中,不能再塊級作用域中宣告。

情況一:

if (true) {
  function f() {}
}


情況二:

www.cppcns.comtry {
  function f() {}
} catch(e) {
  // ...
}

上面兩種函式宣告,根據ECMAScript5的規定都是非法的。

ECMAScript 2015標準規定在塊級作用域宣告函式類似於使用了var關鍵字,即在當前塊級作用域外無法訪問。

{
  function fun() {
    console.log('this is fun');
  }
}
fun(); // this is fun
// 上面的等同於下面的函式
{
  var fn = function () {
    console.log('this is fn');
  }
}
fn(); // this is fn
// 如果使用 let 關鍵字 則在塊級作用域外無法訪問
{
  let f = function () {
    console.log('this is f');
  }
}
f(); // 丟擲異常 描述資訊為 ReferenceError: f is not defined

到此這篇關於Script ES新特性塊級作用域的文章就介紹到這了,更多相關ES新特性塊級作用域內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!