Javascript 笔记:函数调用与函数上下文

news2024/11/29 0:52:58

在 JavaScript 中,函数上下文通常指的是函数在执行时的当前对象的引用,这通常用 this 关键字表示。this 关键字在不同的执行上下文中可能引用到不同的对象。

1 全局上下文

this 关键字用在全局上下文(不在任何函数内部),它指向全局对象。

在浏览器中,全局对象是 window

console.log(this); // 输出: Window {...} (在浏览器环境下)

当你在 Node.js 环境下运行时,输出显示的是 Node.js 的全局对象。包含一系列 Node.js 环境下可用的全局函数和对象

console.log(this);
/<ref *1> Object [global] {
//  global: [Circular *1],
//...

2 函数上下文

2.1 普通函数调用

  • 当一个函数被直接(不作为对象的方法)调用时,this 通常指向全局对象(在非严格模式下)
function myFunc() {
    console.log(this);
}
myFunc();
//输出和前面直接console.log(this)一样

非严格模式下,默认this是全局变量

  • 在严格模式 ('use strict';) 下,this 在函数调用中是 undefined
function myFunc() {
    'use strict';
    console.log(this);
}
myFunc(); // 输出: undefined

 

2.2 方法调用

当一个函数作为一个对象的方法被调用时,this 指向调用该方法的对象

const myObj = {
    myMethod() {
        console.log(this);
    }
};
myObj.myMethod();
//{ myMethod: [Function: myMethod] }

 

2.2.1 原型链

cat、dog这两个object没有say_hello这个function的,所以他们相当于先通过原型链“继承”了object,也即继承了object中的say_hello

 

之后调用say_hello当然就是cat和dog自己了,所以this指向的就是cat和dog

2.3 构造函数

当一个函数通过 new 关键字被调用(作为构造函数)时,this 指向新创建的实例对象。

function Car(make) {
    this.make = make;
}

const myCar = new Car('Toyota');
console.log(myCar.make); // 输出: Toyota

 

 

3 call/apply——明确设置函数调用时的this值

这是之前我们用原型链的方式找到函数调用的this

可以使用apply或者call来设置调用时候的this值

3.1 apply和call的区别

  • call 方法接受一个具体的参数列表,并用这些参数来调用函数
function greet(greeting, punctuation) {
  console.log(greeting + ', ' + this.name + punctuation);
}

const person = { name: 'Alice' };

greet.call(person, 'Hello', '!');  // 输出: Hello, Alice!
  • apply 只接受两个参数:一个是 this 的值,另一个是一个数组(或类数组对象),该数组的元素将作为参数传递给函数
function greet(greeting, punctuation) {
  console.log(greeting + ', ' + this.name + punctuation);
}

const person = { name: 'Alice' };

greet.apply(person, ['Hello', '!']);  // 输出: Hello, Alice!

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

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

相关文章

【微客云】外卖霸王餐项目来啦 免费提供霸王餐系统

它终于出来啦&#xff01;微客云分站终于正式发布&#xff01;&#xff01; 先前的文章就已经预告过微客云要搞分站&#xff0c;很多小伙伴们一直在问老许分站什么时候出来&#xff0c;想加盟分站怎么做&#xff1f;有什么条件&#xff1f;本来是不打算这么快正式官宣分站的&am…

[网鼎杯 2020 白虎组]PicDown python反弹shell proc/self目录的信息

[网鼎杯 2020 白虎组]PicDown - 知乎 这里确实完全不会 第一次遇到一个只有文件读取思路的题目 这里也确实说明还是要学学一些其他的东西了 首先打开环境 只存在一个框框 我们通过 目录扫描 抓包 注入 发现没有用 我们测试能不能任意文件读取 ?url../../../../etc/passwd …

css图形化理解--扭曲函数skew()

transform: skewX(30deg);transform: skewY(45deg);transform: skew(30deg,45deg);transform: skewX(angleX);transform: skewY(angleY);transform: skew(angleX,angleY); 是CSS中的一个2D变换方法&#xff0c;它用于对元素沿X轴、Y轴进行倾斜变换。其中&#xff0c;angle表示倾…

【物联网】Arduino+ESP8266物联网开发(二):控制发光二极管 按钮开关控制开关灯

【物联网】ArduinoESP8266物联网开发(一)&#xff1a;开发环境搭建 安装Arduino和驱动 2.ESP8266基础应用 学习过程中会用到的基础引脚如下。开发板提供3V电源&#xff0c;一般传感器工作电压都是3V&#xff0c;可通过开发板供电。如果设备需要的电压超过3V&#xff0c;如水泵…

electron之进程间通信

Electron进程间通信 使用electron编写程序时经常遇到下面这种场景&#xff1a; 当用户点击一个按钮时&#xff0c;需要将页面输入的信息保存到本地电脑上&#xff1b; 或者是点击菜单时&#xff0c;需要页面窗口做出响应。 用户点击的按钮和窗口展示的内容是运行在渲染进程中&…

【Java 进阶篇】HTML链接标签详解

HTML链接标签是构建网页中超链接的重要元素之一&#xff0c;允许您在不同的网页之间或同一网页内创建链接。本篇博客将详细介绍HTML链接标签&#xff0c;包括超链接的类型、属性、用法和示例代码&#xff0c;旨在帮助基础小白更好地理解和使用链接标签。 1. 超链接的基本概念 …

python 读取文件函数

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了&#xff0c;直接在文末名片自取就可 读取文件内容…

JOSEF约瑟 闭锁继电器 LB-7 YDB-100 100V 50HZ 控制断路器的合闸或跳闸

闭锁继电器LB-7导轨安装名称:闭锁继电器型号:LB-7闭锁继电器额定电压100V功率消耗≤10VA触点容量220V1.5A40W返回系数≥0.8 LB-1A、LB-1D、DB-1、HBYB-102/D YDB-100、HLO、DB-100、LB-7型闭锁继电器 一、用途 LB-7型闭锁继电器(以下简称继电器)用于发电厂及变电所内高压母线…

Vim教程

目录 vim 介绍 常用的四种模式 首先先学会如何正确进入和退出vim&#xff1a; normal模式 insert模式&#xff1a; command模式&#xff1a; v-block模式&#xff1a; vim异常退出 vim配置 vim 介绍 Vim是一款高度可定制的文本编辑器&#xff0c;它的前身是Vi&#xf…

微积分 - 隐函数求导的应用

前置理论 已知y与x有关系&#xff0c;那么如何求解 令u ,则有du/dy 2y,利用链式求导法则: 一个简单的例子 用一个打气筒给一个完美球体充气&#xff0c;空气以常数速率12立方米每秒进入气球&#xff0c;当气球的半径到达2米时&#xff0c;气球半径的变换率是多少&#xff1…

Transformer模型 | Python实现TransformerCPI模型(pytorch)

文章目录 效果一览文章概述程序设计参考资料效果一览 文章概述 Python实现TransformerCPI模型(tensorflow) Dependencies: python 3.6 pytorch >= 1.2.0 numpy RDkit = 2019.03.3.0 pandas Gensim >=3.4.0 程序设计 import torch import numpy as np import random …

阿里面试:页面调10 个上游接口,如何做高并发?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 一个页面要调100 个上游接口&#xff0c;如何优化&#xff1f; 一个场景…

Kafka是什么,以及如何使用SpringBoot对接Kafka

系列文章目录 上手第一关&#xff0c;手把手教你安装kafka与可视化工具kafka-eagle Kafka是什么&#xff0c;以及如何使用SpringBoot对接Kafka 系列文章目录一、Kafka与流处理二、Spring Boot与Kafka的整合Demo1. 新建springboot工程2. 添加Kafka依赖3. 配置Kafka4. 创建Kafka…

TCP/IP网络协议通信函数接口

创建套接字函数 socket 【头文件】 #include <sys/types.h> #include <sys/socket.h> 【函数原型】 int socket(int domain, int type, int protocol); 【函数功能】 socket 函数创建一个通信端点&#xff0c;并返回一个引用该端点的文件描述符&#xff0c;…

C++入门-day03

引言&#xff1a;本节我们讲一下C中的引用、内联函数、Auto、范围for 一、引用 先看一下下面这段代码&#xff1a; 在这段代码中。我们命名了两个变量&#xff0c;a和_a&#xff0c;其中_a就是a的引用 所谓引用就是a的“别名”&#xff0c;我们看一下这段代码的运行结果&…

互联网云厂商大转向:在海外重燃新「战事」

2023&#xff0c;云厂出海的第七个年头&#xff0c;三朵云的海外布局都在加速&#xff0c;在“主动出海”的大背景下&#xff0c;云厂的海外战场也正在发生新的变化。 作者|思杭 编辑|皮爷 出品|产业家 中国云厂&#xff0c;正在将目光从东南亚转移至中东。 东南亚的互…

代码随想录算法训练营第四十六天 | 518. 零钱兑换 II、377. 组合总和 Ⅳ

518. 零钱兑换 II 视频讲解&#xff1a;动态规划之完全背包&#xff0c;装满背包有多少种方法&#xff1f;组合与排列有讲究&#xff01;| LeetCode&#xff1a;518.零钱兑换II_哔哩哔哩_bilibili 代码随想录 &#xff08;1&#xff09;代码 377. 组合总和 Ⅳ 视频讲解&…

【哈士奇赠书活动 - 41期】- 〖产品设计软技能:创业公司篇〗

文章目录 ⭐️ 赠书 - 《产品设计软技能&#xff1a;创业公司篇》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《产品设计软技能&#xff1a;创业公司篇》 ⭐️ 内容简介 在创业公司设计产品与在成熟公司设计产品存在明显差异。《产品设计软…

华为防火墙项目

二、知识点 1&#xff0c;会话表&#xff1a;防火墙通过首包建立会话表&#xff0c;其他非首包通过匹配会话表进行通信&#xff0c;就不用查看安全策略啦。 2&#xff0c;长连接 防火墙为各种协议设定了会话老化机制。当一条会话在老化时间内没有被任何报文匹配&#xff0c;则…

【算法|动态规划No.15】leetcode1035. 不相交的线

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…