内部函数从外部获取参数

时间:2014-02-04 14:13:47

标签: javascript

我不知道内部函数如何从.sort()方法传递参数。 我知道.sort()将值传递给createComparisonFunction(),但它们如何在内部函数中结束?它只是从外部函数中获取任何未使用的参数吗?

我想了解这种行为。

    function createComparisonFunction(propertyName) {

        return function(object1, object2){
            var value1 = object1[propertyName];
            var value2 = object2[propertyName];

            if (value1 < value2){
                return -1;
            } else if (value1 > value2){
                return 1;
            } else {
                return 0;
            }
        };
    }

    var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];

    data.sort(createComparisonFunction("name"));
    alert(data[0].name);  //Nicholas

    data.sort(createComparisonFunction("age"));
    alert(data[0].name);  //Zachary     

2 个答案:

答案 0 :(得分:6)

不,.sort()函数将参数传递给“createComparisonFunction”。相反,“createComparisonFunction”正如其名称所暗示的那样:创建函数并返回它。返回的函数是.sort()方法重复调用的函数。

请注意,在.sort()的调用中:

data.sort( createComparisonFunction("name") );

“createComparisonFunction”被称为。这就是带括号的参数列表(使用单个参数"name")意味着 - 调用此函数。这发生在运行时调用.sort()方法之前。传递给.sort()的是返回值,它本身就是一个函数。

最有趣的事情是返回的函数 - 它将两个参数作为排序比较器 - 应该可以访问最初传递给“createComparisonFunction”的参数。这是因为从另一个函数返回的函数保留了对其原始创建时局部变量上下文的访问权。

答案 1 :(得分:0)

您可以使用方法调用和应用。 例如,createComparison Function.apply(一些Context,一些Arguments)。 两种方法的第一个参数应该是上下文。