es6学习笔记

2016-10-28  本文已影响199人  亲爱的孟良

《ECMAScript6 入门》阮一峰 读书笔记

var tmp = new Date();
function f() {
  console.log(tmp);
  if (false) {
      var tmp = "hello world";
  }
}
f(); // undefined,因为变量提升内层的tmp变量覆盖了外层的tmp变量????
🚩有疑惑,并不理解。。。
2. 不合理场景二,变量泄漏为全局变量(比如for循环里面的计数变量,如果用var来声明,其实在全局也是可以访问到的)
3. 块级作用域与函数声明
    - es5规定函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域中声明,比如在if语句里面就不能声明一个变量,但实际上,浏览器是支持的
    - es6明确允许在块级作用域之中声明函数。比较特别的是,块级作用域之中,函数声明语句的行为类似于`let`,在`块级作用域之外是不可以引用的`
    
    ```
    eg:
    function f(){console.log("I am outside");}
    (function (){
        if(false){
          function f(){console.log("I am inside");}
        }
        f()
    }())
    *===================================================*
    es5中实际上是如此运行的:
    function f(){console.log("I am outside");}
    (function (){
        function f(){console.log("I am inside");}//变量提升
        if(false){}
        f()
    }())
    *===================================================*
    es6中实际运行代码如下:
    function f(){console.log("I am outside");}
    (function(){
    f()//在块级内声明的那个inside的f函数对作用域之外没有影响,所以相当于不存在,
    调用的是外面的函数,因为作用域查找都是向外查找哒!
    }())
    ```
    
    - ⚠️为了兼容的问题,es6允许浏览器可以不遵守上面的规定,也就是可以有自己的行为方式,具体表现为(也就是实际上定义函数的时候遵守的规则,只针对支持es6的浏览器有效):
        - 允许在块级作用域内声明函数
        - 函数声明类似于var,即会提升到全局作用域或函数作用域的头部
        - 同时,函数声明还会提升到所在的块级作用域的头部
     - 在块级作用域内声明函数的时候,块级作用域一定要加大括号,比如在if里面声明一个函数,if后面一定要有大括号

es6允许按照一定模式,从数组和对象中提取值,对变量进行复赋值,成为解构赋值。



上一篇 下一篇

猜你喜欢

热点阅读