2.块级作用域(ES6阮一峰学习记录)

2.块级作用域(ES6阮一峰学习记录)ES6let新增块级作用域的概念。看下列代码:1{2leta=1;3{4leta=6;5}6console.log(a);//17}8{9vara=1;10{11vara=6;12}13console.log(a);//614

大家好,欢迎来到IT知识分享网。2.块级作用域(ES6阮一峰学习记录)"

  ES6 let新增块级作用域的概念。看下列代码:

 1 {
 2     let a=1;
 3     {
 4         let a = 6;
 5     }
 6     console.log(a);//1
 7 }
 8 {
 9     var a=1;
10     {
11         var a = 6;
12     }
13     console.log(a);//6
14 }

  上述代码存在两个块级作用域,他们之间互不影响,所以打印出来的结果为1,如果换成var,由于var不存在块级作用域的概念,打印出来的结果为6。从第二个打印出的结果可以发现在写代码的时候,如果重复命名,由于不存在块级作用域会导致结果受到影响,块级作用域的出现在一定程度上也是为了解决这种问题。

块级作用域和函数声明

 1 function f() { console.log('外部'); }
 2 
 3 (function () {
 4   if (false) {
 5     function f() { console.log('内部'); }
 6   }
 7   f();//f is not a function
 8 }());
 9 
10 (function () {
11 function f() { console.log('内部'); }
12   f();//内部
13 }());

  首先我们要明白函数声明他类似于var,他会提升到所在块级作用域的头部(这里有点像var的变量提升),所以第一个代码运行会报错,等同于下述代码

function f() { console.log('外部'); }

(function () {
  var f;
  if (false) {
    function f() { console.log('内部'); }
  }
  f();//f is not a function
}());

  ES6的块级作用域必须存在大括号,如果不存在大括号,JavaScript不认为它是块级作用域,比如有时候我们在写if语句的时候会进行简写,如下:

if (true) let x = 1;// Lexical declaration cannot appear in a single-statement context 

if (true) {
  let x = 1;//正常
}

  第一个不存在大括号,所以代码认为let为外部声明,就报了如下的错误。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34728.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信