大家好,欢迎来到IT知识分享网。
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