1返回function() {..}并且执行它。其中第一个()起到返回的作用。。则第二个()起到执行的作用。。2window.setInterval = function (a, b) {}是什么意思 ?修改window.setInterval 方法
为function (a, b) {...}这个函数3Array.prototype.slice.call(arguments, 2);是在做什么?arguments对象有length属性和0-n属性。。即Array.prototype.slice方法是类似function (i[, n]) {
//n就不说了。。
var a;
if (this.length <= i) return;
for (a = [] ; i < this.length ; i ++) a[a.length] = this[i];
return a;
}然而Function.prototype.call方法又可以改变被摧残函数的this指针,为形式参数0即arguments对象。。所以可以返回arguments对象的
第三个形式参数到arguments.length - 1个形式参数
4 a.apply(null, arg);  是在做什么?即
执行a这个函数 并且不改变this指针,传给a函数的参数为arg的每一个元素效果相当于
eval("a(" + arg.join(",") + ")");上面都看懂了第5个就不用我说了吧?

解决方案 »

  1.   

    所以可以返回arguments对象的
    第三个形式参数到arguments.length - 1个形式参数这里描述错了。。

    arguments[2] 到 arguments[arguments.length - 1]个参数转换为数组
      

  2.   

    1,2明白了,4有点模糊,3不是太明白arguments又不是完全的数组,改变Array的原型对象的属性方法也并不能在arguments看到效果,如:var arg = arguments.slice(2); 这样不行
    Array.prototype.slice =function(){...}; 重新定义,跟arguments也没关系.以前看到这样的:obj1.methodname.call(obj2,arg);我理解为给obj2这个对象一个一摸一样的,在obj1里有的方法methodname,并传入参数arg处理它,这个过程this指针要交换一次,不知这样理解对不对
    就好像是直接执行 : obj2.methodname(arg)这样一个方法. var arg = Array.prototype.slice.call(arguments, 2);而对于这句,结合你的解释,不知可不可以理解成将 arguments这个类似数组的对象当成数组来处理,分离出第3个开始元素直到最后一个元素进而组成新的数组对象arg那简单套用下,岂不又成了 var arg = arguments.slice(2);
      

  3.   

    我是说。。
    Array.prototype.slice的内核相当于
    function (i) {
    //n就不说了。。
    var a;
    if (this.length <= i) return;
    for (a = [] ; i < this.length ; i ++) a[a.length] = this[i];
    return a;
    }
    而你用.call调用它然后参数是(arguments, 2)
    第一个参数的那个对象就是
    这个函数里的thisfunction (i) {
    //n就不说了。。
    var a;
    if (this.length <= i) return;
    for (a = [] ; i < this.length ; i ++) a[a.length] = this[i];
    return a;
    }
    这里操作的this就是arguments对象了。。
    然后那个i的值就是call的第二个参数所以。返回的就是arguments[2] 到 arguments[arguments.length - 1]的值的数组
      

  4.   

    4和这个是一样的道理。。
    (null, arg)
    null值的话就是不改变this对象只不过是apply和call的参数传法不一样。。第二个执行效果相当于eval("a(" + arg.join(",") + ")");
      

  5.   

    arguments这个类似数组的对象当成数组来处理,分离出第3个开始元素直到最后一个元素进而组成新的数组对象arg这个理解是对的。。可是slice是Array对象的方法arguments对象是不具备的所以要call下3和4的意思就是除去setInterva接收的前两个参数
    然后第一个参数是函数的话执行那个函数并且把后面的参数都传给它这个东西。。是偶们伟大神圣的阿信斑竹大人04年时发明的方法:D
      

  6.   

    3原来理解上有误,现在明白了,4,5那个看起来用的好巧妙,也感谢muxrwc(需时越兔)帮忙解读,截贴了,回去再看看,有问题再问吧
    不知道可用分怎么才能增的快些?入不敷出了..呵呵
      

  7.   

    接触javascript才1个半月,周围没有人搞这个,只靠google+csdn提问..感觉像蜗牛爬..ps:居然揭帖了都能回复,以前不知道说..
      

  8.   

    呵,CSDN可没规定结贴了就不能回复。
    我的JS全部都是csdn学的连google都没用。