JavaScript--函数的参数列表以及arguments的用法

news2024/12/25 9:28:01

函数声明时,参数的问题

即使函数在定义时没有显示声明任何参数,你仍然可以在调用该函数时传递参数
这是因为 JavaScript 函数内部有一个隐含的 arguments 对象,它包含了所有传递给函数的参数。

示例

我们来通过一些示例代码来更清楚地说明这一点。

示例 1:没有参数的函数

function example() {
  console.log(arguments); // 输出所有传入的参数
}

example(1, 2, 3); // 输出:[1, 2, 3]

在这里插入图片描述

示例 2:函数声明了参数

function example(a, b, c) {
  console.log(a, b, c); // 输出具体的参数
  console.log(arguments); // 输出所有传入的参数
}

example(1, 2, 3); // 输出:1 2 3  [1, 2, 3]
example(1); // 输出:1 undefined undefined  [1]

使用 arguments 对象

在没有声明参数的函数中,arguments 对象仍然可以捕获所有传入的参数:

function example() {
  for (let i = 0; i < arguments.length; i++) {
    console.log(arguments[i]);
  }
}

example(1, 2, 3); // 输出:1 2 3

应用在 newCall 方法中

newCall 方法可以接收多个参数,并通过 arguments 对象处理这些参数:

Function.prototype.newCall = function (context) {
  if (typeof this !== "function") {
    throw new TypeError("调用的不是函数");
  }

  context = context || window;

  const args = Array.prototype.slice.call(arguments, 1);

  const fnSymbol = Symbol();

  context[fnSymbol] = this;

  const result = context[fnSymbol](...args);

  delete context[fnSymbol];

  return result;
};

function person(a, b, c, d) {
  console.log(this.name);
  console.log(a, b, c, d);
}

let egg = {
  name: "测试",
};

person.newCall(egg, '1', '2', '3', '4'); // 输出:测试 1 2 3 4

总结

在 JavaScript 中,即使函数没有声明任何参数,也可以传入参数。函数内部通过 arguments 对象捕获所有传递的参数。这种特性使得函数调用非常灵活,特别是在实现类似 Function.prototype.call 或 Function.prototype.apply 这样的动态方法时尤为有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1846583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue项目中dom拖动排序功能实现

vue项目中拖动元素改变其顺序的功能实现 实现此功能&#xff0c;我利用的是SortableJs,其官网上直接介绍其为功能强大的js拖拽库&#xff0c;只需要简单的代码即可实现dom拖拽 1.下载 npm i sortablejs 2.引入 使用时&#xff0c;我们在那个页面中使用&#xff0c;就在该vue文…

Linux基础篇-逻辑卷管理

首先我们要知道&#xff0c;逻辑卷也来源于物理磁盘&#xff0c;只是将他们统一定义和重新分配空间。这一点非常重要&#xff0c;只有理解了这一定才能更好的理解逻辑卷和卷组。 本文介绍的是最常用的线性卷。 什么是线性卷&#xff1f;复杂的定义没必要去看&#xff0c;简单来…

Python基础教程(二十七):urllib模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

软件开发和部署,蓝绿环境、灰度环境

发布策略 目前常见的发布策略有蓝绿发布、红黑发布、金丝雀&#xff08;灰度&#xff09;发布、滚动发布等 在项目迭代的过程中&#xff0c;不可避免需要”上线“。上线对应着部署&#xff0c;或者重新部署&#xff1b;部署对应着修改&#xff1b;修改则意味着风险。 蓝绿发…

竞赛选题 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

uni-app中的css3选择器使用

2.给 view 添加样式 .box view{ font-size: 40upx; color: #8A6DE9; } 3.想改变某一个view 样式 .box>view:nth-child(1){ background: #09BB07; } .box>view:nth-child(2){ background: red; } .box>view:nth-child(3){ background: yellow; } 注意&am…

MMDetection 目标检测 —— 环境搭建和基础使用

参考文档 开始你的第一步 — MMDetection 3.3.0 文档 依赖 步骤 0. 下载并安装 Anaconda。 步骤 1. 创建并激活一个 conda 环境。&#xff08;我选择的是python3.10&#xff09; conda create --name openmmlab python3.8 -y conda activate openmmlab 步骤 2. 基于 PyTo…

【算法基础】Newton求根法

文章目录 Newton求根法算法求解平方根 Newton求根法 1664年Newton提出了一种迭代求根的方法。这种方法有时也被叫做Raphson方法。虽然Newton更早发现了这种方法&#xff0c;但Raphson首先在自己的文章中介绍了这种方法。 该方法解决的问题如下。 给定一个方程&#xff1a; …

AXI学习笔记

文章目录 AXI口诀&#xff1a;AXI三种总线&#xff0c;三种接口&#xff0c;一个协议背景知识一、 AMBA&#xff1a;二、AXI2.1 通信协议与握手机制2.2 AXI协议特点2.3 三种AXI总线类型&#xff08;AXI4、AXI4-lite、AXI4-stream&#xff09;2.3.1 AXI通道&#xff08;5通道&am…

CleanMyMac中文版2024官方正式版下载!你的电脑清洁专家!

CleanMyMac中文版&#xff0c;你的电脑清洁专家&#xff01;✨&#x1f9f5; 你是否曾为电脑的卡顿和垃圾文件而烦恼&#xff1f;别担心&#xff0c;CleanMyMac中文版来帮你解决这些问题&#xff01;这款神奇的软件不仅可以帮助你清理垃圾文件&#xff0c;还能优化系统性能&…

循环的三种写法

一、for(i): for (int i0;i< arrayList.size();i){System.out.println(arrayList.get(i));} 最基本的循环方法。 二、for-each: 又称加强for &#xff0c;更简单的遍历集合。 三、迭代器: 迭代器是调用Java中的Iterator接口&#xff0c;该接口定义了三个方法分别是hasNex…

AI助手,办公提效好工具!

随着人工智能AI技术的发展&#xff0c;AI工具已经成为我们提高工作效率的重要工具。无论是日常办公、学习还是生活娱乐&#xff0c;AI工具都能为我们提供支持和帮助。下面小编就来和大家分享几款AI助手&#xff0c;方便大家了解和使用AI工具。 1. Kimi智能助手 Kimi智能助手是…

fastadmin配合定时任务

一个系统单纯到linux本身的定时任务&#xff0c;是很不方便的&#xff0c;需要结合起来使用定时任务 - 便捷的后台定时任务管理 – 基于ThinkPHP和Bootstrap的极速后台开发框架 1.安装插件 2.配置宝塔定时任务 3.自己用工具生成规则即可:Cron - 在线Cron表达式生成器

Vue3.4新增的defineModel的使用

define-model的作用 在3.3及之前的版本&#xff0c;父子组件之间的通讯&#xff0c;一直都是靠props&#xff08;父传子&#xff09;和emit&#xff08;子传父&#xff09;来实现。而define-model整合了这两种方法&#xff0c;只需要在父组件中定义define-model的方法&#xf…

肇庆具有资质等保机构有几家?在哪里?

在近期揭晓的“中国百强城市排行榜”中&#xff0c;广东省共有12个城市入选&#xff0c;其中包括肇庆。肇庆-山水之城&#xff0c;文化之韵&#xff0c;端砚之乡&#xff0c;岭南瑰宝&#xff0c;是一个非常有发展的城市&#xff0c;企业多多。这不不少肇庆企业在问&#xff0c…

MySQL——触发器(trigger)基本结构

1、修改分隔符符号 delimiter $$ $$可以修改 2、创建触发器函数名称 create trigger 函数名 3、什么样在操作触发&#xff0c;操作哪个表 after &#xff1a;……之后触发 before &#xff1a;……之后触发 insert &#xff1a;……之后触发 update &#xff1a;……之后触…

Flutter【组件】点击类型表单项

简介 flutter 点击表单项组件&#xff0c;适合用户输入表单的场景。 点击表单项组件是一个用户界面元素&#xff0c;通常用于表单或设置界面中&#xff0c;以便用户可以点击它们来选择或更改某些设置或输入内容。这类组件通常由一个标签和一个可点击区域组成&#xff0c;并且…

轻松ChatGPT的使用技巧,让你的生活更智能

ChatGPT&#xff0c;由OpenAI的GPT-3.5架构支持&#xff0c;已经彻底改变了我们与人工智能互动的方式。这个先进的语言模型被证明是一种多功能的工具&#xff0c;能够处理各种对话任务。不过&#xff0c;用户可以通过一些技巧和窍门&#xff0c;进一步提升使用ChatGPT的体验&am…

世界是软件定义的 - 正如硬件公司所证明的那样

很难相信&#xff0c;马克安德森&#xff08;Marc Andressen&#xff09;在13年前写下了他著名的博客&#xff0c;题为“软件正在吞噬世界”。在这篇文章中&#xff0c;他谈到了现代软件组织对传统企业造成的破坏。 十三年后&#xff0c;即使面对英伟达的平流层估值&#xff0…

echarts隔行背景色

看了下使用说明&#xff0c;试了半天终于搞对了 参考文档&#xff1a;Documentation - Apache ECharts option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: bar,mar…