下面这个例子是从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");
按照高程上的意思是,外部函数的活动对象并不是
compareNames
而是我截图的部分。这部分没有被销毁,是因为,被
createComparisonFunction("name")
返回的匿名函数所引用,而createComparisonFunction("name")
返回的匿名函数又被compareNames
引用;所以当compareNames
取消对 匿名函数引用时,匿名函数就可以被销毁了,当匿名函数被销毁了,就没有对象再引用propertyName
了,然后书上说的外部函数的活动对象
就可以被销毁了。实际上,不管哪种写法,当
createComparisonFunction
执行完毕的时候,这个函数的执行环境的作用域链会被销毁,只是前一种写法,他的活动对象,不会被销毁,而后一种写法会。