我在jquery Sizzle库框架中乱搞,我看到了这段代码
[0, 0].sort(function() {
baseHasDuplicate = false;
return 0;
});
Run Code Online (Sandbox Code Playgroud)
想到了一些问题:
除了答案之外,关于这些东西的文章或教程会很棒.
起初我理解了大部分代码,但不是全部.数组速记和匿名函数对我来说很熟悉,但是我希望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;
});
Run Code Online (Sandbox Code Playgroud)
如果您熟悉排序功能的工作原理,那么现在就非常有意义了.排序序列时,排序算法需要经常比较序列中的两个项目,以便知道哪个项目要排在另一个项目之前.为了允许您自定义排序,这些函数通常允许您将另一个函数作为参数传递,并且此函数的作用是决定项目如何相互比较.
在这种情况下,我们有一个已经排序的小数组.任何合理的排序算法都应该只调用一次该函数然后完成.但是,javascript编译器可能会尝试在某些情况下优化比较函数,以便不调用它.因此,此代码的目的是检测何时发生这种情况.在调用函数之前,首先将baseHasDuplicate值设置为true.然后运行此代码,然后检查baseHasDuplicate是否已更改.