ES6 02块级作用域

 
要点:1.全局作用域 2.块级作用域

 

一、全局作用域
1.浏览器环境有一个顶层对象window,其属性和var的全局变量等价
2.window对象的内置属性,输出默认值;非内置属性undefined
3.var若设置window对象的内置属性作为变量,则会直接覆盖
   console.log(window.name);   // 空,内置属性
 console.log(window.abcd);    //undefined,非内置属性
 

 console.log(name);   //空,内置全局
 console.log(abcd);   //报错
 

 console.log(window.name===name);//true,等价
 

 var value=10;
 console.log(window.value); //var的全局变量即window的属性
 

   var name='Mr.Lee';
 console.log(window.name);//内置属性被覆盖
 

 

4.以上,对比现在模块化编程理念,显得格格不入
5.webstorm 环境中根本无法识别window,它是Node环境,不支持对象



二、块级作用域
1.ES6之前只有全局作用域和函数作用域,并没有块级作用域
2.循环体和条件体就是块级作用域就是两个花括号区域:{}
3.在块级区域不使用let会造成全局变量污染问题
4.{{{...}}}块级作用域支持多层嵌套,每一层均为封闭,只作用于此:
 {{{
     {let value=10;}
     console.log(value);报错
}}}

  

5.ES6之前,采取自我立即执行匿名函数的方法来阻止污染
     (function(){
     var value=10;
      }());
   console.log(value);  //报错
 

 {
     let value=10;
 }

  

6.ES6之前函数必须在顶层声明,但违反不报错,而ES6则开始支持
7.块级作用域内函数声明,可全局访问,没封闭
{
     function fn(){
         console.log('块级函数');
     }
 }
 fn();//正常访问

  

8.推荐使用函数表达式的方法去构建函数
{
    let fn=function(){
        console.log('块级函数');
    };
    fn();
}

 

posted @ 2021-11-23 19:47  翟莹萍  阅读(30)  评论(0编辑  收藏  举报