• 注册
  • 前端综合 关注:4 内容:10

    var args=[].slice.call(arguments,1)是什么意思?

  • 查看作者
  • 打赏作者
  • 拉黑名单
      • arguments是什么
      我们逐一来看:

      []是什么?

      []是js语法中创建一个新数组的意思,看如下代码:
      var a = [];
      var b = new Array();
      这两种写法并无二致。

      [].slice.call是什么?

      首先你知道[]是一个数组,那么[].slice是它的一个方法,是一个函数。
      它的作用是返回数组中的某一段,看如下代码:
      var a = [1, 2, 3, 4, 5];
      var b = a.slice(2);
      // b是a从2号位开始的片段
      // 也就是[3, 4, 5]
      在js中,函数本身也是一种对象,也是具有属性和方法的,call就是其中之一。
      它的第一个参数,是指定函数执行时的this指针,后面的参数,就是函数执行的参数。
      具体的不展开讲,你可以查阅MDN: Function.prototype.call()
      看如下代码:
      var a = function (n) {
          console.log(this, n);
      }
      var b = {};
      a(1); // log出Window对象, 1
      a.call(b, 2); // log出b对象, 2
      所以说[].slice.call(arguments, 1)实际上相当于(并不一定等同于):
      arguments.slice(1);

      arguments是什么

      arguments可以看做一个数组。每一个js函数内部都有arguments,它代表传入的参数数组。
      看如下代码:
      function a() {
          console.log(arguments);
      }
      a(1, 2, 3); // log出[1, 2, 3]
      现在你应该明白了,[].slice.call(arguments, 1)返回的是arguments数组从1号位开始的片段。
      看如下代码:
      function a() {
          var args = [].slice.call(arguments, 1);
          console.log(args);
      }
      a('haha', 1, 2, 3, 4, 5); // log出[1, 2, 3, 4, 5]
      a('run', '-g', '-b'); // log出['-g', '-b']

      请登录之后再进行评论

      登录
    • 帖子间隔 侧栏位置: