下面的代码摘自《javascript语言精粹》中的array.sort(comparefn)一节(Page81),但是我用firebug测试却产生了错误信息:missing } after property list,message: 'Expected an object when sorting by ' + name;
问题1:请教错误产生的原因?
问题2:假设错误已经修正,那么可以看作var name='last', minor=by("first"),但当by函数第二个参数为函数的时候,则返回minor(o,p)这个函数,但是minor(o,p)又是在什么地方定义的呢?(可能我的表述不清,总之就是对这段代码不能理解,请大家帮我梳理一下理解这段代码的思路。)
问题3:我对by函数返回的匿名函数的形参o,p的理解是:在这里o,p是指的数组s中的任意两个参数,如果我理解的正确,那么这个指定任意参数的规则是如何规定的,我应该去搜索什么关键词了解相信的知识点?对于数组s而言,这段by函数计算了多少次,是15次吗?如果不是,那是多少次,为什么?
window.onload = function () {
var by = function (name,minor) {
    return function (o, p) {
        var a, b;
        if (typeof o === 'object' && typeof p === 'object' && o && p) {
            a = o[name];
            b = p[name];
            if (a === b) {
                return typeof minor === 'function' ? minor(o,p) : 0;
            }
            if (typeof a === typeof b) {
                return a < b ? -1 : 1;
            }
            return typeof a < typeof b ? -1 : 1;
        } else {
            throw {
                name: 'Error',
                message: 'Expected an object when sorting by ' + name;
            };
        }
    };
};var s = [
    {first: 'Joe',   last: 'Besser'},
    {first: 'Moe',   last: 'Howard'},
    {first: 'Joe',   last: 'DeRita'},
    {first: 'Shemp', last: 'Howard'},
    {first: 'Larry', last: 'Fine'},
    {first: 'Curly', last: 'Howard'}
];
s.sort(by('first'));    // s is [
//    {first: 'Curly', last: 'Howard'},
//    {first: 'Joe',   last: 'DeRita'},
//    {first: 'Joe',   last: 'Besser'},
//    {first: 'Larry', last: 'Fine'},
//    {first: 'Moe',   last: 'Howard'},
//    {first: 'Shemp', last: 'Howard'}
// ]
  var sSort = s.sort(by('last',by('first')));
console.log(sSort);
}