- [[scope]]
- 函数创建时,生成的一个JS内部的隐式属性
- 函数存储作用域链的容器,作用域链AO/GO
- 函数执行完成以后,AO是要销毁的,AO是一个即时的存储容器,再次执行生成新的
- 函数执行前一刻,生成AO
- 举个栗子
function a() {
function b() {
var b = 2;
}
var a = 1;
b();
}
var c = 3;
a();
- 闭包
当内部函数被返回到外部并保存时,一定会产生闭包,闭包会产生原来的作用域链不释放,过渡的闭包可能会导致内存泄漏,或加载过慢。
function test() {
let a = 100;
function add() {
a++;
console.log(a);
}
function reduce() {
a--;
console.log(a);
}
return [add, reduce];
}
let t = test();
t[0](); // 101
t[1](); // 100
function sunSched() {
let sunSched = '';
let operation = {
setSched: function(thing) {
sunSched = thing;
},
showSched: function() {
console.log('Schedule is ' + sunSched);
}
}
return operation
}
let schedule = sunSched();
schedule.setSched('esting');
schedule.showSched();
function test() {
let arr = [];
for (var i = 0; i < 10; i++) {
arr[i] = function() {
console.log(i + ' ');
}
}
return arr;
}
let myArr = test();
for (var j = 0; j < 10; j++) {
myArr[j]();
}
// 10个10,返回了10个闭包,AO公用一个为10的i