apply和call在Javascript中的使用与区别

apply和call在js中的使用与区别:

字符串格式化:

${占位符}

name='小帅'
console.log(`我是${name}`) //我是小帅

在这里插入图片描述

apply:
  • 语法:function.apply(thisArg, [argsArray])
  • thisArg:可选参数,指定函数执行时的上下文(即函数内部的this值)。
  • argsArray:可选参数,是一个类数组对象,包含传递给函数的参数列表。
  • 作用:将一个对象作为函数的上下文(this值),并以数组形式传递参数,然后调用该函数。
  • 参数一:对象 参数二:数组
function greet(name) {console.log(`Hello, ${name}!`);
}
const person = {name: 'Alice'
};greet.apply(person, ['Bob']);
// 输出:Hello, Bob!
greet(person.name)
//Hello, Alice!

分析:

​ person调用greet函数但是并没有使用自身的参数,而是使用外部的.

​ person.greet 参数就是自身的name值.


call:
  • 语法:function.call(thisArg, arg1, arg2, ...)
  • thisArg:可选参数,指定函数执行时的上下文(即函数内部的this值)。
  • arg1, arg2, ...:可选参数,是按顺序传递给函数的参数列表。
  • 作用:将一个对象作为函数的上下文(this值),然后按参数列表传递参数,调用该函数。
  • 参数一:对象 ,参数二、参数三、参数四
function greet(name) {console.log(`Hello, ${name}!`);
}const person = {name: 'Alice'
};greet.call(person, 'Bob');
// 输出:Hello, Bob!
总结:
function greet() {console.log(`Hello, ${this.name}!`);//不传递参数
}const person1 = { name: 'Alice' };
const person2 = { name: 'Bob' };//
// 使用apply()调用greet(),并指定执行上下文为person1
greet.apply(person1); // 输出:Hello, Alice!// 使用call()调用greet(),并指定执行上下文为person2
greet.call(person2); // 输出:Hello, Bob!

​ 无论是apply()还是call(),它们都可以用来改变函数内部的this值,并在调用函数时传递参数。并不使用内部对象的值,而是使用传入的参数,区别在于apply()使用数组形式传递参数,而call()使用逗号分隔的参数列表传递参数。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bootloader——预编程流程

预编程目录 前言一、预编程步骤1.1 切换到扩展会话1.2 检查刷写前提条件整车ECU进入扩展会话(补充)1.3 停用故障码存储功能1.4 停止通信(一般报文或网络管理报文)前言 刷写过程定义了刷写前、刷写中、刷写后三个阶段。 一、预编程步骤 预编程步骤用来做刷写前的CAN网络准…

公共字段自动填充-@TableField的fill实现(2)

TheadLocal 客户端发送的每次http请求,在服务端都会分配新的线程。因此登录检查过滤器、controller、元数据对象处理器属于一个线程。 TheadLocal是线程的局部变量: TheadLocal常用方法: 如何在元数据对象处理器中获取当前登录用户的id&…

二十、虚拟机网络配置

1、Linux网络配置原理 我自己Linux虚拟机的IP地址是:192.168.159.131 vmnet8:192.168.159.1 无线网卡:192.168.159.1 2、查看网络IP和网关 查看虚拟网络编辑器和修改IP地址 如果把这个位置的子网IP换成:192.168.8.0的话重启虚拟机…

【开源】基于Vue.js的在线课程教学系统的设计和实现

项目编号: S 014 ,文末获取源码。 \color{red}{项目编号:S014,文末获取源码。} 项目编号:S014,文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…

数字IC前端学习笔记:异步复位,同步释放

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 异步复位 异步复位是一种常见的复位方式,可以使电路进入一个可知的状态。但是不正确地使用异步复位会导致出现意想不到的错误,复位释放便是…

力扣hot100 两数之和 哈希表

&#x1f468;‍&#x1f3eb; 力扣 两数之和 &#x1f60b; 思路 在一个数组中如何快速找到某一个数的互补数&#xff1a;哈希表 O(1)实现⭐ AC code class Solution {public int[] twoSum(int[] nums, int target){HashMap<Integer, Integer> map new HashMap<&g…

安卓源码-工程目录

1、程序启动配置及主要的权限声明 2、 界面渲染 3、 布局用 4、 常量等 5、 gradle构建

【Linux】C文件系统详解(三)——如何理解缓冲区以及自主封装一个文件接口

文章目录 如何理解缓冲区现象概念:文件缓冲区为什么要有缓冲区缓冲区在哪里 自己封装一个简单的文件接口自主封装目标 代码关于缓冲区强制刷新内核 关于字符串格式化函数printf和scanf函数 如何理解缓冲区 以前写过一个进度条, 有一个输出缓冲区->这个缓冲区在哪里,为什么要…

python中列表的基础解释

列表&#xff1a; 一种可以存放多种类型数据的数据结构 列表的创建&#xff1a; 1.用【】创建列表 #创建一个空列表 list1[] #创建一个非空列表 list2 [zhang,li,ying,1,2,3] #输出内容及类型 print(list1,type(list1)) print(list2,type(list2))结果&#xff1a; 2.使用list…

STM32CubeMX学习笔记(2)--DSP库的使用

1.DSP库简介 STM32的DSP库是为了支持数字信号处理应用而设计的&#xff0c;它包含了一系列优化的数学函数和算法&#xff0c;能够在STM32微控制器上高效地执行数字信号处理任务。 DSP库通常包括以下主要特性&#xff1a; 1.数学函数库&#xff1a; 包括各种基本的数学运算函数…

初始ProtoBuf

目录​​​​​​​ ⼀、初识ProtoBuf 1. 序列化概念 2. ProtoBuf是什么 3. ProtoBuf的使用特点 ⼆、安装ProtoBuf 1、ProtoBuf在window下的安装 2、ProtoBuf在Linux下的安装 ⼀、初识ProtoBuf 1. 序列化概念 序列化和反序列化 序列化&#xff1a;把对象转换为字节序列…

动态规划解背包问题

题目 题解 def knapsac(W: int, N: int, wt: List[int], val: List[int]) -> int:# 定义状态动作价值函数: dp[i][j]&#xff0c;对于前i个物品&#xff0c;当前背包容量为j&#xff0c;最大的可装载价值dp [[0 for j in range(W1)] for i in range(N1)]# 状态动作转移for…