Javascript数组函数?

标签 javascript

我在jquery Sizzle library framework里瞎折腾,看到了这段代码

[0, 0].sort(function() {
    baseHasDuplicate = false;
    return 0;
});

我想到了几个问题:

  1. 如何调用这个函数
  2. 写这样的函数有什么好处
  3. 为什么它的写作风格独特?
  4. 是不是介于“排序”和“功能”之间不需要是“=”?

除了答案之外,关于这些东西的文章或教程会很棒。

最佳答案

起初我理解了大部分代码,但不是全部。数组速记和匿名函数对我来说很熟悉,但我希望 sortFunction 有两个参数,而这个参数不带任何参数。因此,我不明白为什么你会这样做:代码希望完成什么。

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

http://jsperf.com/jquery-1-4-3-perf-degrade/4

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

// 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 编译器可能会在某些情况下尝试优化比较函数,这样它就不会被调用。因此,此代码的目的是检测何时发生这种情况。在调用该函数之前,您首先将 baseHasDuplicate 值设置为 true。然后你运行这段代码,然后检查 baseHasDuplicate 是否已经改变。

关于Javascript数组函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7811628/

相关文章:

javascript - 使用 jQuery 从包含日期的字符串中获取日期

javascript - 页面中两个不同轮播的两个过渡时间

javascript - 单击链接时无法更改 div 的内容

javascript - 为什么元素的属性出现在内联函数的范围内?

javascript - 如何删除Mongoose中所有集合的所有文档

javascript - 如何从按钮中删除类并在 sweetalert2 中添加自定义类?

javascript - 无法读取空输入字段的属性 'value'?

javascript - 将数据附加到 html 表

javascript - 关于如何在同一页面上多次调用 javascript 函数的建议

javascript - 在相对容器内定位绝对div