ES5 ES6 做用域聲明部分

一旦引擎進入一個做用域是,會先掃描該做用域內的定義語句編程

ES5 函數

     var foo = 1;作用域

     (function(){io

       console.log(foo) ;//undefinedconsole

      var foo = 2function

     })();變量

     函數在加載的時候會當即執行,這時候在函數的做用域內,因爲有聲明foo的語句,故在函數的做用域內foo的值爲2,而且是在console.log(foo)以後聲明的,根據聲明前置,函數中能夠等價於     co

     (function(){ let

      var foo ;錯誤

       console.log(foo) ;//undefined

      foo = 2

     })();

 

    故console.log(foo)打印出來的是undefined

 

   固然,若是函數中不聲明foo的話,那麼函數中打印的foo就應該是全局變量中的 foo, 也就是 1 

 

ES6 

   對於這種不是很符合編程邏輯的行爲,ES6 的let 和const 中,引擎將這種行爲直接視爲錯誤處理

  

   let foo = 1;

     (function(){

       console.log(foo) ;//ReferenceError: foo is not defined

      let foo = 2

     })();

    ES6 標準中(通常狀況下爲嚴格模式)不容許變量(或者常量)在被定義以前被其餘語句所讀取,以避免出現邏輯性的錯誤。

相關文章
相關標籤/搜索