作用域是其作用的范围,主要分为全局作用域和局部作用域,全局的环境不会被回收;
function show() {} show(),函数在执行之后,会创建一个新的环境(或者说给一块新的内存地址);如果某个环境定义的数据一直被使用,就不会被删
<script>
function hd() {
let n = 1;
return function show() {
console.log(++n);
};
}
let a = hd();
a();
</script>
块级作用域:用var声明的变量会在全局里面,用let和const声明的变量会在块级作用域里面
let、const和var在for循环里面的区别:var没有块的概念,所以在for循环外面,也可以打印var的变量值,所以每次i值在改的时候,都是改的全局的值,
for (var i = 0; i <= 3; i++) {
console.log(i);//0,1,2,3
}
console.log(i);//0,1,2,3,4
for循环使用let的话,在外层就访问不到了
for (let i = 0; i <= 3; i++) {
console.log(i); //0,1,2,3
}
console.log(i); // i is not defined