es6-块级作用域let 和 var的区别
块级绑定
js的处理机制和我们大家想象的完全不同,并不完全是所谓函数调用以及上下执行那样简单,它是存有”域”的本质区别的。
var具有全局污染特性,所以es6才会出现let 、const。
下面通过一些实例来给大家解释一下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 8 <title>Document</title> 9 </head> 10 11 <body> 12 13 <!-- 14 undefined和null的区别? 15 16 undefiend是定义了未赋值,而null是未定义 17 --> 18 </body> 19 <script> 20 // 我们所认识的 21 function getValue(any) { 22 23 if (any) { 24 var val = 'blue'; 25 // 其他代码 26 return val; 27 } else { 28 29 console.log(val) 30 // value值可以在此访问,值为undefined 31 return null; 32 } 33 // value值在此处也可以访问,值为undefined 34 } 35 36 getValue(); 37 38 // Js引擎所认识的 39 function getValues(anys) { 40 41 var val; 42 43 if (anys) { 44 val = 'blue'; 45 // 其它代码 46 return value; 47 } else { 48 return null; 49 } 50 } 51 52 // 我们以为的var的作用域只限于那一块作用域内,实际上它已经跨越了“{}”界限。 53 // val变量的声明被提升到了函数顶部,初始化工作区域还保留在原区域。 54 // val变量也是可访问的,此处它的值会是undefined,因为它没有被初始化。 55 </script> 56 57 </html>