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>

 


posted @ 2017-10-27 16:43  Sunsin  阅读(445)  评论(0编辑  收藏  举报