Javascript数组函数?

Javascript数组函数?,javascript,Javascript,我在jQuerySizzle库框架中闲逛,看到了这段代码 [0, 0].sort(function() { baseHasDuplicate = false; return 0; }); 我想到了几个问题: 如何调用此函数 编写这种函数有什么好处 为什么它是独特的写作风格 在“排序”和“函数”之间不需要“=”吗 除了答案之外,一篇关于这方面的文章或教程也会很棒。Array.sort将函数作为参数。该函数负责在数组元素之间进行比较,并返回正确的结果以实际对它们进行排序。因此,您不

我在jQuerySizzle库框架中闲逛,看到了这段代码

[0, 0].sort(function() {
    baseHasDuplicate = false;
    return 0;
});
我想到了几个问题:

  • 如何调用此函数
  • 编写这种函数有什么好处
  • 为什么它是独特的写作风格
  • 在“排序”和“函数”之间不需要“=”吗

  • 除了答案之外,一篇关于这方面的文章或教程也会很棒。

    Array.sort
    将函数作为参数。该函数负责在数组元素之间进行比较,并返回正确的结果以实际对它们进行排序。因此,您不会直接调用传递给sort的函数。

    起初,我理解大部分代码,但不是全部。数组速记和匿名函数对我来说很熟悉,但我希望sort函数可以接受两个参数,而这一个不接受任何参数。因此,我不明白您为什么要这样做:代码希望实现什么

    幸运的是,谷歌搜索为我解决了这个问题。您可以在jsPerf站点上找到代码,并通过以下链接中的问题和上下文查看原始函数:

    现在我们还可以看到代码的注释:

    // Here we check if the JavaScript engine is using some sort of
    // optimization where it does not always call our comparision
    // function. If that is the case, discard the hasDuplicate value.
    //   Thus far that includes Google Chrome.
    [0, 0].sort(function() {
      baseHasDuplicate = false;
      return 0;
    });
    
    如果您熟悉排序函数的工作原理,那么现在就非常有意义了。对序列进行排序时,排序算法需要经常比较序列中的两个项目,以知道哪一个要优先排序。为了允许您自定义排序,此类函数通常允许您将另一个函数作为参数传递,此函数的工作是确定项目之间的比较方式


    在本例中,我们有一个已排序的小数组。任何合理的排序算法都应该只调用此函数一次,然后完成。但是,javascript编译器可能会在某些情况下尝试优化比较函数,以便不调用它。因此,此代码的目的是检测何时发生这种情况。在调用函数之前,首先将
    basehasdeplicate
    值设置为true。然后运行此代码,并进一步检查baseHasDuplicate是否已更改。

    您正在调用
    Array.sort()
    函数,该函数接受一个参数—一个比较两个元素的函数。从文档中可以看出,函数应该返回false或true

    现在是参数,这是一个注释性函数,也是一个闭包。您不能直接调用它,因为您不保留它的引用


    它不是
    [0,0].sort=function(){}
    ,因为您将函数作为参数传递,因此这意味着sort函数将在内部某处使用annon函数。如果您分配它(使用=),您将更改
    排序
    函数本身。

    您指的是排序()还是匿名函数?不,是“函数”,您指的是哪一个?排序函数,还是参数?我不知道你对哪一个感兴趣。。。因为它们都是函数:)我建议你买一本关于Javascript的书(例如:“Javascript模式”,如果你知道其他语言(C++等),并且你想学习JS)。排序函数不应该返回false或true-有三种状态:小于、大于和等于。忽略第三种状态可能会导致问题。