关于闭包导致外部函数不会被销毁的问题请教一下
下面这个例子是从js高级程序设计上找的,其意思就是内部函数=null之后,外部函数的活动对象才会被销毁
function createComparisonFunction(propertyName) {
return function(ob1,ob2) {
var value1=ob1[propertyName];
var value2=ob2[propertyName];
if(value1<value2) {
return -1;
}
else {
return 1;
}
}
}
var compareNames=createComparisonFunction("name");
var result= compareNames({name:"cc"},{name:"dd"});
console.log(result);
compareNames=null;
我想再请教一下,如果改成下面这样写,createComparisonFunction这个函数就能被销毁吧?
function createComparisonFunction(propertyName) {
return function(ob1,ob2) {
var value1=ob1[propertyName];
var value2=ob2[propertyName];
if(value1<value2) {
return -1;
}
else {
return 1;
}
}
}
createComparisonFunction("name");
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
按照高程上的意思是,外部函数的活动对象并不是
compareNames
而是我截图的部分。这部分没有被销毁,是因为,被
createComparisonFunction("name")
返回的匿名函数所引用,而createComparisonFunction("name")
返回的匿名函数又被compareNames
引用;所以当compareNames
取消对 匿名函数引用时,匿名函数就可以被销毁了,当匿名函数被销毁了,就没有对象再引用propertyName
了,然后书上说的外部函数的活动对象
就可以被销毁了。实际上,不管哪种写法,当
createComparisonFunction
执行完毕的时候,这个函数的执行环境的作用域链会被销毁,只是前一种写法,他的活动对象,不会被销毁,而后一种写法会。