首頁 >web前端 >前端問答 >es6中引入了什麼作用域

es6中引入了什麼作用域

WBOY
WBOY原創
2022-05-05 15:44:221723瀏覽

es6中引入了「區塊級作用域」;es5中只有全域作用域和函數作用域,es6中由一對大括號包裹形成的作用域就是區塊級作用域,並明確允許在區塊級作用域中宣告函數,函數宣告語句的行為類似let,在區塊級作用域之外不可引用。

es6中引入了什麼作用域

本教學操作環境:windows10系統、ECMAScript 6.0版、Dell G3電腦。

es6中引入了什麼作用域

ES6 引入了區塊級作用域,明確允許在區塊層級作用域之中宣告函數。 ES6 規定,在區塊級作用域之中,函數宣告語句的行為類似let,在區塊級作用域之外不可引用。

ES6標準中,由一對大括號包裹形成的作用域就是區塊級作用域。

ES5 規定,函數只能在頂層作用域和函數作用域之中聲明,不能在區塊層級作用域聲明。

ES5 只有全域作用域和函數作用域,沒有區塊級作用域,這帶來很多不合理的場景。

(1)內層變數可能會覆寫外層變數。

    var tmp = new Date();
    function f() {
        console.log(tmp);
        if (false) {
            var tmp = 'hello world';
        }
    }
    f();//undefined

(2)用來計數的循環變數洩漏為全域變數

    var s = 'hello';
    for (var i = 0; i < s.length; i++) {
        console.log(s[i]);//h e l l o
    }
    console.log(i);//5

變數i只用來控制循環,但是循環結束後,它並沒有消失,洩漏成了全域變量。

範例如下:

// 浏览器的 ES6 环境
function f() { console.log(&#39;I am outside!&#39;); }
(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log(&#39;I am inside!&#39;); }
  }
  f();
}());
// Uncaught TypeError: f is not a function

在ES6標準中,在區塊級作用域中宣告函數,會將函數宣告當做由var宣告的變量,提升到區塊層級作用域頂部,只將函數當作變數進行變數名稱聲明,不會宣告函數體,上述程式碼相當於:

// 浏览器的 ES6 环境
function f() { console.log(&#39;I am outside!&#39;); }
(function () {
  var f = undefined;
  if (false) {
    function f() { console.log(&#39;I am inside!&#39;); }
  }
  f();
}());
// Uncaught TypeError: f is not a function

【相關推薦:javascript影片教學web前端

以上是es6中引入了什麼作用域的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn