美文网首页饥人谷技术博客
函数的arguments对象

函数的arguments对象

作者: 辉夜乀 | 来源:发表于2017-04-07 18:59 被阅读30次

定义

由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在函数体内部读取所有参数。这就是arguments对象的由来。

用法

  • 读取参数:
    arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。
var f = function(one) {
  console.log(arguments[0]);
  console.log(arguments[1]);
  console.log(arguments[2]);
  console.log(arguments);
}

f(1, 2, 3)
// 1
// 2
// 3
// [1,2,3]
  • 为参数赋值
    arguments对象除了可以读取参数,还可以为参数赋值(严格模式不允许这种用法)。
var f = function(a, b) {
  arguments[0] = 3;
  arguments[1] = 2;
  return a + b;
}

f(1, 1)
// 5
  • 查询参数个数
    可以通过arguments对象的length属性,判断函数调用时到底带几个参数。
function f() {
  return arguments.length;
}

f(1, 2, 3) // 3
f(1) // 1
f() // 0

与数组的关系

需要注意的是,虽然arguments很像数组,但它是一个对象。数组专有的方法(比如slice和forEach),不能在arguments对象上直接使用。

但是,可以通过apply方法,把arguments作为参数传进去,这样就可以让arguments使用数组方法了。

// 用于apply方法
myfunction.apply(obj, arguments).

// 使用与另一个数组合并
Array.prototype.concat.apply([1,2,3], arguments)

要让arguments对象使用数组方法,真正的解决方法是将arguments转为真正的数组。下面是两种常用的转换方法:slice方法和逐一填入新数组。

var args = Array.prototype.slice.call(arguments);

// or

var args = [];
for (var i = 0; i < arguments.length; i++) {
  args.push(arguments[i]);
}

callee属性

arguments对象带有一个callee属性,返回它所对应的原函数。

var f = function(one) {
  console.log(arguments.callee === f);
}

f() // true

可以通过arguments.callee,达到调用函数自身的目的。这个属性在严格模式里面是禁用的,因此不建议使用。

相关文章

  • 过程记录

    了解arguments 特性:arguments对象不能显式创建,arguments对象只有函数开始时才可用。函数...

  • js中arguments的用法

    arguments特性 **arguments **对象不能显式创建, **arguments **对象只有函数开...

  • js中arguments的用法

    arguments特性arguments对象不能显式创建,arguments对象只有函数开始时才可用。函数的 ar...

  • Javascript arguments对象详解

    今天我们来看看arguments对象及属性。arguments对象不能显式创建,arguments对象只有函数开始...

  • 笔记(四)--arguments

    1.arguments对象介绍 arguments 凡是函数调用,默认含有一个 arguments 对象,可以将其...

  • JavaScript基础 - js对象和绑定对象事件

    arguments是函数中的隐含对象通过arguments[0]、arguments[1]可以获得函数的参数arg...

  • 10/12 js小总结

    1.arguments[] 在函数体中arguments指代该函数的Arguments对象,在全局中为undefi...

  • ECMAScript arguments对象

    1.arguments是什么? arguments 是一个类数组对象 arguments对象是函数内部的本地变量,...

  • arguments

    描述 arguments对象是所有函数中可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此...

  • 理解参数—arguments

    一.arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数...

网友评论

    本文标题:函数的arguments对象

    本文链接:https://www.haomeiwen.com/subject/yqzhattx.html