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) 的这种方式去调用,至此,关于这条语句引发的思考也就此结束了

    .

  • 相关阅读:
    java List 学习
    java Map 的学习
    samba服务
    linux常用命令
    解决粘包问题
    Python网络编程
    python异常处理
    python中封装
    python中继承和多态
    python面向对象基础
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/11997238.html
Copyright © 2011-2022 走看看