function createComparisonFunction(propertyName) {
return function(obj1, obj2) {
//return function(aa) {
var v1 = obj1[propertyName];
var v2 = obj2[propertyName];

if (v1 < v2) {
return -1;
} else if (v1 > v2) {
return 1;
} else {
return 0;
}
//}
};
}

var compare = createComparisonFunction('name');
var result = compare(
{ name: 'Nicholas'},
{ name: 'Greg'    }
);
//var aa = result('asdf');
compare = null;
alert(result);
为什么最后compare = null却还可以输出result为1?不是已经解除对匿名函数的引用了吗?

解决方案 »

  1.   

    result 和 compare 没有直接的关系
    result 只是接收了 compare函数的返回值。 
      

  2.   

    猪没了
    他的翔还在result手里
      

  3.   


        var compare = function(obj1, obj2) {
                //return function(aa) {
                    var v1 = obj1[propertyName];
                    var v2 = obj2[propertyName];
                     
                    if (v1 < v2) {
                        return -1;
                    } else if (v1 > v2) {
                        return 1;
                    } else {
                        return 0;
                    }
                //}
            };
        var result = compare(
                                { name: 'Nicholas'},
                                { name: 'Greg'       }
                            );
        //var aa = result('asdf');
        compare = null;
        alert(result);
    其实是这么个东西, result和compare根本没有什么关系嘛
      

  4.   


        var compare = createComparisonFunction('name');
        var result = compare(
                                { name: 'Nicholas'},
                                { name: 'Greg'       }
                            );
        //执行到这里的时候:
        //compare已经被赋值为一个匿名函数“function(aa){...}”(由createCo...('name')返回所得);
        //result则被赋值为1(由compare({name:....})所得);    //至此compare和result有各自的值,且彼此没有关系,所以下面两行的结果如楼主所见
        compare = null;
        alert(result);