在调试使用jQuery的javascript代码时,我发现了以下代码:
[0, 0].sort(function()
{
baseHasDuplicate = false;
return 0;
});
Run Code Online (Sandbox Code Playgroud)
通过我对javascript的理解,这段代码将对包含两个零的数组进行排序,并使用比较函数,该函数将始终设置一个全局变量,并返回相等的效果baseHasDuplicate = false;.
来自一个有价值的来源,我想我错过了一些东西.我错过了什么或这是一个编程失败?
Bru*_*eis 12
正如您在此处看到的(中文),此代码可能用于测试Chrome.编辑:请参阅下面的完整故事 ..
正如文章中所解释的那样,Chrome会优化".sort(...)"方法,使[0, 0].sort(...)调用不会执行给定的比较函数.
从文章中,Chrome的".sort(...)"实现类似于:
function sort(comparefn) {
var custom_compare = (typeof(comparefn) === 'function');
function Compare(x,y) {
if (x === y) return 0;
if (custom_compare) {
return comparefn.call(null, x, y);
}
...
}
Run Code Online (Sandbox Code Playgroud)
事实上0 === 0,它不会打电话comparefn.
在jQuery的情况下,它不会将全局变量设置baseHasDuplicate为false.
编辑:如果你浏览灒的源代码,在这里例如(进入"灒CSS选择器引擎"下的黄色区域,被称为"灒变量"),你会发现下面的解释:
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
baseHasDuplicate = true;
// 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)
看起来神秘莫测!
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |