functionqq(argument){//输出的结果1console.log(this);t=this;b='123';functionaa(){vartt=this;//输出的结果2console.log(tt);o=t;//输出的结果3console.log(o);console.log('run');}returnaa;}三个输出的结果一样,就是说this都指向了全局的window对象了?functionPerson(name,age){this.name=name;this.age=age;}Person.prototype.out=function(){varself=this;//输出的结果4console.log(self);console.log(this.name+':'+this.age);}newPerson('dd',90).out()输出的结果4的,说明原型变量中,this指向父一级对象,如果没有了在继续向上查找吗?闭包内存消耗可以这样理解吗???每一次你去调用,需要把上一级的节点引入,对于内存中栈操作,就是放入一个内存中,并不会自动清除,这样的话,这条引用就一直存在内存中,所以就会一直延伸下去,就会造成内存的消耗
2 回答
明月笑刀无情
TA贡献1828条经验 获得超4个赞
this没有向上查找这一说。this是执行上下文环境的一个属性,是从执行上下文里面获得其值,而不是通过作用域链去查找。所以this和作用域链没有半毛钱关系。不过题主对闭包的理解是OK的。因为如果保存了闭包中的变量,意味着有可能再次使用该变量,从而也就必须记录其作用域链,系统也就无法对闭包的变量和变量所依赖的作用域进行回收。完了就消耗了呗。所以如果要防止内存泄漏,切断对闭包中变量的引用就好。
添加回答
举报
0/150
提交
取消