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(); }