当前位置: 首页 > news >正文

【JavaScript】函数:arguments对象

文章目录

  • 1 定义
  • 2 与数组的关系
  • 3 callee属性

1 定义

JavaScript允许函数有不定数目的参数,arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。

  • 正常模式
var f = function(a, b) {arguments[0] = 3;arguments[1] = 2;return a + b;
}f(1, 1) // 5,函数f()调用时传入的参数,在函数内部被修改成3和2
  • 严格模式
var f = function(a, b) {'use strict'; // 开启严格模式arguments[0] = 3;arguments[1] = 2;return a + b;
}f(1, 1) // 2,修改arguments对象,不会影响到真实参数a和b。
  • length属性
function f() {return arguments.length; // 返回实际调用时带入的参数个数
}f(1, 2, 3) // 3
f() // 0

2 与数组的关系

虽然arguments很像数组,但它是一个对象。数组专有的方法(比如slice和forEach),不能在arguments对象上直接使用。
如果要让arguments对象使用数组方法,真正的解决方法是将arguments转为真正的数组。下面是两种常用的转换方法:slice方法和逐一填入新数组。

var args = Array.prototype.slice.call(arguments);// 或者
var args = [];
for (var i = 0; i < arguments.length; i++) {args.push(arguments[i]);
}

3 callee属性

arguments对象带有一个callee属性,返回它所对应的原函数。
可以通过arguments.callee,达到调用函数自身的目的。这个属性在严格模式里面是禁用的,因此不建议使用。

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

http://www.mrgr.cn/news/16593.html

相关文章:

  • fork入门
  • 手机充值的功能测试框架 - 测试要点
  • EXO项目StandardNode;max_generate_tokens;buffered_token_output;is_finished;
  • Unity实战案例全解析 之 背包/贩卖/锻造系统(左侧类图实现)
  • fastmock使用
  • Linux——IO模型_多路转接(epoll)
  • 【立体匹配】双目相机外参自标定方法介绍
  • 实现一个能设置MaxLine的LayoutManager
  • 【C++ 第十八章】C++11 新增语法(1)
  • 《软件工程导论》(第6版)第4章 形式化说明技术 复习笔记
  • VSCode+debugpy远程调试
  • 强推第一本给程序员看的AI Agent教程终于来啦!全方位解析LLM-Agent
  • 空岛战争的正确姿势
  • 【鸿蒙开发从0到1-day03】
  • 震惊!更换GPU会改变LLM的行为
  • 《高等代数》“爪”字型行列式
  • 性能分析之使用 Jvisualvm dump 分析示例
  • LabVIEW开发高温摩擦试验机
  • 自然语言处理系列四十八》Word2vec词向量模型》算法原理
  • Unclutter - 苹果电脑(Mac)桌面文件笔记剪贴板管理工具