zoukankan      html  css  js  c++  java
  • 浅谈[].slice.call(arguments, 1)

    今天在跟踪调试项目的代码时,发现在一个function中用到了这么一段[].slice.call(arguments, 1) 的代码。心中便起了疑惑,对于slice 和 call 的方法,倒是不怎么陌生,解析了下上面的那段代码,就是为了获取arguments 从1 开始到结尾的所有元素。只是觉得奇怪为什么不直接用 arguments.slice(1) 这样去使用呢?(PS:JS当初是啃了《JavaScript权威指南》,可是后面也没有怎么深入去用,最近转来开发HTML5 Game 时,才发现好多基础的东西都忘记的差不多了,汗!!!)。于是,就自己先做了下面的测试:

    测试1 先打印下 arguments

    var a = function(f){
    console.log(arguments);
    }
    
    a('show', [12,3,4,55]);

    结果:['show', Array[4]]

    测试2

    var a = function(f){
    console.log([].slice.call(arguments, 1));
    }
    
    a('show', [12,3,4,55]);

    结果:[Array[4]]
    测试3

    var a = function(f){
    console.log(arguments.slice(1));
    }
    
    a('show', [12,3,4,55]);

    结果:报错!!! **arguments.slice is not a function(...)**
    此时就心中产生了疑惑了,为啥在测试一中打印出来的arguments 是个数组的东西啊,为啥会提示没有slice这个方法呢?带着疑问我去请教下了队伍里的大牛,得到了下面的答案:

    测试4

    (function() {
    console.log(arguments instanceof Array)
    })();

    结果:false
    arguments 并非数组,只是访问单个参数的方式与访问数组元素的方式相同。因此在使用slice方法的时候,需要用类似[].slice.call(arguments, 1) 的这种方式去调用,至此,关于这条语句引发的思考也就此结束了

    .

  • 相关阅读:
    DispatcherServlet?
    解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法?
    面向对象的特征有哪些方面?
    服务调用是阻塞的吗?
    构造器Constructor是否可被override?
    迭代器和枚举之间的区别?
    Kafka 判断一个节点是否还活着有那两个条件?
    数据传输的事务定义有哪三种?
    mq 的缺点 ?
    如何获取 topic 主题的列表?
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/11997238.html
Copyright © 2011-2022 走看看