JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。
块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。
<script type="text/javascript">{var a = 1;console.log(a); // 1}console.log(a); // 1// 可见,通过var定义的变量可以跨块作用域访问到。(function A() {var b = 2;console.log(b); // 2})();// console.log(b); // 报错,// 可见,通过var定义的变量不能跨函数作用域访问到if(true) {var c = 3;}console.log(c); // 3for(var i = 0; i < 4; i++) {var d = 5;};console.log(i); // 4 (循环结束i已经是4,所以此处i为4)console.log(d); // 5// if语句和for语句中用var定义的变量可以在外面访问到,// 可见,if语句和for语句属于块作用域,不属于函数作用域。{var a = 1;let b = 2;const c = 3;{console.log(a); // 1 子作用域可以访问到父作用域的变量console.log(b); // 2 子作用域可以访问到父作用域的变量console.log(c); // 3 子作用域可以访问到父作用域的变量var aa = 11;let bb = 22;const cc = 33;}console.log(aa); // 11 // 可以跨块访问到子 块作用域 的变量// console.log(bb); // 报错 bb is not defined// console.log(cc); // 报错 cc is not defined}</script>
