来自John Resig的JavaScript学习高级JavaScript#45

来自John Resig的JavaScript学习高级JavaScript#45,javascript,Javascript,这个例子来自John Resig的学习高级JavaScript 这里有一些问题,我希望能得到一些帮助。提前谢谢 1) 。当function highest()返回makeArray(参数)时,function makeArray是否在function highest中的排序函数之前发生?因此,在makeArray()运行之后,剩下的部分 function highest(){ return makeArray(arguments).sort(function(a,b){

这个例子来自John Resig的学习高级JavaScript

这里有一些问题,我希望能得到一些帮助。提前谢谢

1) 。当
function highest()
返回
makeArray(参数)
时,
function makeArray
是否在
function highest
中的
排序
函数之前发生?因此,在makeArray()运行之后,剩下的部分

function highest(){ 
          return makeArray(arguments).sort(function(a,b){ 
            return b - a; 
          }); 
        } 

function makeArray(array){ 
  return Array().slice.call( array ); 
} 

assert(highest(1, 1, 2, 3)[0] == 3, "Get the highest value."); 
assert(highest(3, 1, 2, 3, 4, 5)[1] == 4, "Verify the results.");
函数的最大值是否继续,排序是否在makeArray返回的数组上进行

2) 在函数makeArray(array)中,“call”调用到底是什么

3) 在函数makeArray中,之所以使用slice,是因为调用单独获取其参数,而不是作为数组

4) 在最后一个断言中,[1]是否表示4>数组中的位置,即排序后有一个数组['5'、'4'、'3'、'3'、'2'、'1']

  • 是的,完全正确。这些动作是按顺序发生的

  • 它调用
    Array.prototype.slice
    并传递
    Array
    ,这是
    参数的
    对象。在没有参数的情况下调用时,
    slice
    只返回它正在处理的对象的副本。这就是我们如何将类似于
    参数的数组
    对象转换为实际数组的方法

  • 见#2
    slice
    call
    串联使用,以生成实际数组的
    参数的副本

  • 是的,再一次,你是对的。
    highest
    函数返回一个数组,其中包含按降序排序的参数


  • 当我回答这个问题时,另一个答案被贴了出来。但我认为问题中显示的大部分困惑归结为一个关键点

    在JavaScript中,函数和方法是对象。当你说
    Array.slice
    时,你得到了
    slice
    方法。当您说
    Array.slice()
    时,您现在正在调用
    slice
    方法。因此
    Array.slice.call
    访问
    Array
    对象上
    slice
    方法的
    call
    属性。(该属性本身恰好是一个方法。)并且
    Array.slice.call(stuff)
    调用该属性

    这是语言的一个基本事实,很容易被忽略。但如果您不理解这一点,您会发现使用它的代码实际上不可能真正理解

    sort(function(a,b){ 
        return b - a;