87,997
社区成员




function Counter() {
let count = 0; //没有this
this.up = function() {
return ++count;
};
this.down = function() {
return --count;
};
}
let counter = new Counter();
counter.up() //1,为什么这里还能得到count的值?
counter={
up(){
return ++count;
},
down(){
return --count;
}
}
时隔数月再回过头来看看,对这个问题有了大致的了解。
up和down在“诞生”的时候就记住了当时的词法环境,这个环境可以找到Counter函数作用域内的count变量,即up和down的[[Environment]]的隐藏属性拥有count=0。在实例化后,counter.up()被调用时,up这个方法依然记得count=0这个变量,这就是闭包。