全局作用域只有一个,每个函数又都有作用域(环境)。
函数每次调用都会创建一个新的作用域。
let title = "dsdf";
function a(){
console.log(title)
}
a();a();
使用let或const可以把变量声明在作用域里面,
1.使用let或const声明的变量可以被当前环境使用,或者子作用域使用,定义的数据不能被父级作用域使用。
2.没用调用函数不会开辟内存空间
3.作用域链只向上查找,找到全局window即终止,应该尽量不要在全局作用域中添加变量。
4.函数被执行后其环境变量将从内存中删除。下面函数在每次执行后将删除函数内部的total变量。
function count() {
let total = 0;
}
count();
5.如果子函数被使用时父级环境将被保留
function hd() {
let n = 1;
return function() {
let b = 1;
return function() {
console.log(++n);
console.log(++b);
};
};
}
let a = hd()();
a(); //2,2
a(); //3,3
6.构造函数也是很好的环境例子,子函数被外部使用父级环境将被保留
function User() {
let a = 1;
this.show = function() {
console.log(a++);
};
}
let a = new User();
a.show(); //1
a.show(); //2
let b = new User();
b.show(); //1