你真的懂this吗?JavaScript作用域与this指向全解析

JavaScript原理篇——深入理解作用域、作用域链、闭包、this指向 执行上下文描述了代码执行时的环境,包括变量对象、作用域链和 this 值;而作用域则决定了变量和函数的可访问性范围,分为全局作用域和局部作用域。变量对象用于存储变量和函数声明:是与执行上下文相关联的数据结构,用于存储在上下文中定义的变量、函数声明和形参等信息。作用域链用于解析标识符的查找路径:是 JavaScript 中用于解析标识符(变量名)的机制,它由多个执行上下文的变量对象组成的链表结构。当代码在某个执行上下文中查找变量时,会首先查找当前上下文的变量对象,如果找不到,则会沿着作用域链向上一级上 阅读详情

第一章:JavaScript中this的迷思与核心概念

在JavaScript中,this关键字的行为常常令开发者感到困惑。它的值并非由函数定义的位置决定,而是由函数调用时的执行上下文动态绑定。理解this的核心在于掌握其绑定规则:默认绑定、隐式绑定、显式绑定以及new绑定。

执行上下文中的this指向

this的值取决于函数如何被调用。以下是常见场景:
  • 全局环境中,this指向全局对象(浏览器中为window)
  • 对象方法中,this通常指向调用该方法的对象
  • 使用call、apply或bind可显式指定this值
  • 构造函数中,this指向新创建的实例

代码示例:不同调用方式下的this

// 全局环境
console.log(this); // 浏览器中输出 window

const obj = {
  name: "Alice",
  greet() {
    console.log(this.name); // this 指向 obj
  },
  delayedGreet() {
    setTimeout(() => {
      console.log(this.name); // 箭头函数捕获外部this,仍指向 obj
    }, 100);
  }
};

obj.greet();        // 输出: Alice
obj.delayedGreet(); // 输出: Alice

this绑定优先级对比

绑定类型示例方式优先级
默认绑定独立函数调用最低
隐式绑定obj.method()中等
显式绑定func.call(obj)较高
new绑定new Constructor()最高
graph TD A[函数如何被调用?] --> B{是否通过new调用?} B -->|是| C[this指向新实例] B -->|否| D{是否通过call/apply/bind?} D -->|是| E[this指向显式指定对象] D -->|否| F{是否作为对象方法调用?} F -->|是| G[this指向调用者] F -->|否| H[this指向全局对象或undefined(严格模式)]

第二章:深入理解作用域与执行上下文

2.1 词法作用域与动态作用域的对比分析

作用域的基本概念
作用域决定了变量的可访问范围。词法作用域(静态作用域)在代码编写时即确定,而动态作用域则在运行时根据调用栈决定变量绑定。
词法作用域示例

function outer() {
    let x = 10;
    function inner() {
        console.log(x); // 输出 10,查找外层词法环境
    }
    inner();
}
outer();
上述代码中,inner 函数定义在 outer 内部,其作用域链在定义时已确定,无论何处调用,都会访问到 x = 10。
动态作用域的行为差异
尽管 JavaScript 不使用动态作用域,但可通过对比理解:
  • 词法作用域:基于函数定义位置
  • 动态作用域:基于函数调用位置
核心区别总结
特性词法作用域动态作用域
绑定时机编译时运行时
可预测性高低

2.2 执行上下文的创建与调用栈机制

JavaScript 引擎在执行代码时,会为每个函数调用创建一个执行上下文。这些上下文通过调用栈(Call Stack)进行管理,遵循“后进先出”的原则。
执行上下文的生命周期
每个执行上下文经历两个阶段:创建阶段和执行阶段。在创建阶段,变量对象(VO)、作用域链和 this 指向被确定。
调用栈的工作机制
当函数被调用时,其执行上下文被压入调用栈;函数执行完毕后,该上下文被弹出。
function foo() {
  bar();
}
function bar() {
  console.log("Hello");
}
foo(); // 调用栈:全局 -> foo -> bar -> 弹出
上述代码中,foo() 被调用时,其上下文入栈,接着调用 bar(),bar 上下文入栈。执行完成后依次弹出,最终回到全局上下文。
  • 全局执行上下文在程序启动时创建,唯一且始终存在
  • 函数执行上下文每次调用时新建
  • 调用栈过深可能引发“栈溢出”错误

2.3 变量提升与暂时性死区的实际影响

JavaScript 中的变量提升(Hoisting)机制会导致 `var` 声明的变量被提升至函数或全局作用域顶部,但仅声明提升,赋值保留原位置。这容易引发未定义访问问题。
let 与 const 的暂时性死区
使用 `let` 和 `const` 声明的变量不会被提升,并在声明前进入“暂时性死区”(Temporal Dead Zone),此时访问会抛出 ReferenceError。

console.log(a); // undefined
var a = 1;

console.log(b); // 抛出 ReferenceError
let b = 2;
上述代码中,`var` 导致 `a` 提升但值为 `undefined`;而 `b` 处于暂时性死区,禁止提前访问,增强了变量使用的安全性。
  • var:仅声明提升,初始化可在后续
  • let/const:存在暂时性死区,必须先声明后使用
  • 建议统一使用 let 和 const 避免意外行为

2.4 闭包的本质及其在作用域中的表现

闭包是函数与其词法作用域的组合。当一个内部函数访问其外层函数的变量时,便形成了闭包,这些变量会在外部函数执行完毕后继续存在。
闭包的基本结构

function outer() {
    let count = 0;
    return function inner() {
        count++;
        return count;
    };
}
const counter = outer();
console.log(counter()); // 1
console.log(counter()); // 2
上述代码中,inner 函数持有对 count 的引用,即使 outer 已执行完毕,count 仍被保留在内存中,体现了闭包的持久性。
闭包与作用域链
  • 内部函数可访问外部函数的参数和变量
  • 闭包维持对外部作用域的引用,而非值的拷贝
  • 多个闭包共享同一外部变量时,会相互影响

2.5 实践案例:作用域链在复杂嵌套中的应用

在JavaScript中,作用域链决定了变量的查找机制。当函数嵌套多层时,内部函数会沿着作用域链逐层向上查找变量。
嵌套函数中的作用域链访问

function outer() {
    const a = 1;
    function middle() {
        const b = 2;
        function inner() {
            console.log(a + b); // 输出 3
        }
        inner();
    }
    middle();
}
outer();
该代码展示了三层函数嵌套。inner 函数虽无直接声明 a 和 b,但通过作用域链依次在 middle 和 outer 中找到对应变量,体现词法作用域的静态性。
闭包与作用域链的持久化
  • 内部函数引用外部变量时,外层作用域不会被销毁
  • 闭包保留对作用域链的引用,即使外层函数已执行完毕
  • 合理利用可实现私有变量封装,但滥用可能导致内存泄漏

第三章:this指向的核心规则解析

3.1 默认绑定与严格模式下的行为差异

在JavaScript中,函数的默认绑定规则取决于执行上下文是否处于严格模式。非严格模式下,独立函数调用时 this 指向全局对象(浏览器中为 window);而在严格模式下,this 为 undefined。
非严格模式示例
function showThis() {
  console.log(this);
}
showThis(); // 输出: Window {...}
该函数在全局环境中调用,this 自动绑定到全局对象。
严格模式示例
'use strict';
function showThis() {
  console.log(this);
}
showThis(); // 输出: undefined
启用严格模式后,同一调用方式下 this 不再指向全局对象,而是保持为 undefined。
  • 非严格模式:默认绑定启用全局对象
  • 严格模式:禁止自动绑定,提升安全性

3.2 隐式绑定与对象链式调用中的陷阱

在JavaScript中,隐式绑定发生在函数作为对象方法被调用时,this指向该对象。然而,在链式调用中,若中间方法返回的不是原始对象,而是另一个对象或函数,this的指向可能意外丢失。
常见陷阱示例
const obj = {
  value: 1,
  increment() {
    this.value++;
    return this;
  },
  print() {
    console.log(this.value);
    return this;
  }
};

obj.increment().print(); // 正常工作
上述代码通过返回this实现链式调用。但若某个方法未正确返回对象:
const chained = {
  val: 0,
  add() { this.val++; },
  getVal() { return this.val; }
};
chained.add().getVal(); // TypeError: Cannot read property 'getVal' of undefined
由于add()未返回this,后续调用失败。
解决方案建议
  • 确保每个链式方法都显式返回this或目标对象
  • 使用ES6 Proxy拦截方法调用以统一处理返回值
  • 在开发中借助TypeScript静态检查避免遗漏返回值

3.3 显式绑定:call、apply与bind的深度比较

在JavaScript中,`call`、`apply`和`bind`是实现函数显式绑定的核心方法,用于精确控制`this`指向。
核心方法对比
  • call:立即执行函数,参数逐个传入
  • apply:立即执行函数,参数以数组形式传入
  • bind:返回新函数,延迟执行,可预设参数
代码示例与分析
function greet(greeting, punctuation) {
  return `${greeting}, I'm ${this.name}${punctuation}`;
}

const person = { name: 'Alice' };

greet.call(person, 'Hello', '!');  // "Hello, I'm Alice!"
greet.apply(person, ['Hi', '?']);  // "Hi, I'm Alice?"
const boundGreet = greet.bind(person, 'Hey');
boundGreet('!'); // "Hey, I'm Alice!"
call和apply立即调用函数并绑定this,区别在于参数传递方式;bind返回一个永久绑定this的新函数,适用于事件处理等异步场景。

第四章:高级应用场景与常见误区

4.1 箭头函数中的this继承机制剖析

箭头函数作为ES6的重要特性,其对 this 的处理方式与传统函数存在本质差异。它不会创建自己的 this 上下文,而是**静态继承外层作用域的 this 值**。
词法绑定 vs 动态绑定
普通函数的 this 在运行时动态绑定,而箭头函数的 this 在定义时即确定,属于词法绑定。

const obj = {
  name: 'Alice',
  normalFunc: function() {
    console.log(this.name); // Alice
  },
  arrowFunc: () => {
    console.log(this.name); // undefined(继承全局this)
  }
};
obj.normalFunc();
obj.arrowFunc();
上述代码中,arrowFunc 定义在对象字面量内,但因其为箭头函数,无法绑定 obj 为 this,实际继承的是外层作用域(通常是全局)的 this。
典型应用场景
  • 回调函数中保持上下文一致性
  • 避免使用 bind 或缓存 self = this

4.2 构造函数与new操作符对this的影响

在JavaScript中,构造函数被设计用于创建对象实例。当使用 new 操作符调用函数时,该函数内部的 this 将指向一个新创建的空对象,且该对象的原型会被设置为构造函数的 prototype 属性。
new操作符的执行流程
  • 创建一个全新的空对象;
  • 将该对象的隐式原型(__proto__)指向构造函数的 prototype;
  • 将构造函数内部的 this 绑定到这个新对象;
  • 若构造函数未显式返回对象,则自动返回该新对象。
代码示例与分析
function Person(name) {
  this.name = name; // this指向由new创建的新对象
}

const person1 = new Person("Alice");
console.log(person1.name); // 输出: Alice
上述代码中,new Person("Alice") 创建了一个新对象,并将 this 绑定到该对象,从而实现了属性赋值。若省略 new,则 this 会指向全局对象或 undefined(严格模式),导致意外行为。

4.3 事件处理中this丢失问题及解决方案

在JavaScript事件处理中,this指向的上下文容易因函数调用方式改变而丢失,尤其在类组件或对象方法中绑定事件时尤为常见。
常见this丢失场景

class Button {
  constructor() {
    this.text = '点击我';
  }
  handleClick() {
    console.log(this.text); // undefined
  }
}
const btn = new Button();
document.getElementById('btn').addEventListener('click', btn.handleClick);
上述代码中,handleClick被作为普通函数调用,this不再指向Button实例。
解决方案对比
方法说明
bind()手动绑定this上下文
箭头函数利用词法作用域保留this
包装函数使用()=>this.handleClick()调用
推荐优先使用箭头函数或构造函数中提前bind以确保一致性。

4.4 使用Proxy和Reflect模拟this绑定实验

在JavaScript中,通过`Proxy`与`Reflect`可精细控制对象行为,进而模拟`this`的绑定机制。利用`get`和`apply`陷阱,能拦截属性访问与函数调用。
核心实现逻辑
const handler = {
  get(target, key, receiver) {
    return Reflect.get(target, key, receiver);
  },
  apply(target, thisArg, args) {
    return Reflect.apply(target, thisArg, args);
  }
};
const proxy = new Proxy(obj, handler);
上述代码中,`receiver`确保`this`指向代理实例,维持正确的委托关系。
应用场景对比
  • 方法调用时自动绑定上下文
  • 实现响应式数据依赖追踪
  • 避免显式使用call/apply/bind
该机制为框架级`this`管理提供了底层支持。

第五章:从原理到实践的全面总结与进阶建议

性能调优的实际策略
在高并发系统中,数据库连接池配置直接影响响应延迟。以 Go 语言为例,合理设置最大空闲连接数可显著降低资源争用:

db.SetMaxOpenConns(100)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(time.Hour)
微服务架构下的可观测性建设
完整的监控体系应包含日志、指标和链路追踪三大支柱。推荐使用以下技术栈组合:
  • Prometheus 收集服务指标
  • Loki 统一日志管理
  • Jaeger 实现分布式链路追踪
容器化部署的最佳实践
生产环境中的 Pod 配置需明确资源限制与健康检查机制。参考如下 Kubernetes 配置片段:
配置项推荐值说明
requests.cpu200m保障基础调度优先级
limits.memory512Mi防止内存溢出导致节点崩溃
livenessProbeHTTP GET /health检测应用存活状态
安全加固的关键步骤
零信任架构要求每个服务间通信均需认证。实施建议包括:
  1. 启用 mTLS 双向证书认证
  2. 使用 OpenPolicy Agent 实施细粒度访问控制
  3. 定期轮换密钥与凭证
PCL:实现 PPF估计(附完整源码) 阅读详情

相关推荐

DCM4CHEE Archive Light 应用配置-存储配置

本文介绍了在DICOM归档系统中配置和管理存储的方法,包括通过用户界面和LDAP导入两种方式。主要内容包括: 存储配置概述:用户可根据需求配置单个或多个存储设备,支持在磁盘空间不足或多任务并行时使用。存储分为Archive设备级(序列元数据存储)和Application Entity级(对象存储/元数据存储)。 用户界面操作: 设备级存储配置:通过菜单导航添加/编辑存储描述符,设置Storage ID、URI等关键参数 应用级存储引用:在设备扩展和网络AE中分别配置元数据和对象存储引用 LDAP配置方法:

洪城叮当的博客 1417

vue中动态获取变量名并赋值

需求根据vuex返回的数据,动态针对每个data中指定的变量改为true但如果一个个if去手写就太麻烦了;所以前缀相同尾部为I做为结束方便使用 效果: data () { return { video0: '', video1: '', video2: '', video3: '', video4: '', video5: '' } }, cuVal..

周家大小姐 5170

JDK8升级JDK17过程中遇到的那些坑

JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。

BASK2312的博客 6686

js 中的 this 指向问题(作用域问题)

箭头函数: 1、箭头函数是没有this的,this是继承来的 2、箭头函数的this来源于声明的环境,就是说从声明环境中寻找this,如没有找到那就是window对象 3、因为箭头函数没有this,而是从声明环境(向上)寻找,所以也就不存在arguments、super、new.target变量 4、由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind(...

lwx931449660的博客 1353

基于C#的软PLC梯形图编辑器开发实战

本文详细介绍了基于C#开发软PLC梯形图编辑器的实战过程。文章从核心数据结构设计入手,阐述了如何利用C#的面向对象特性构建梯形图元素模型,并实现了图形编辑、指令表输入、逻辑连接拓扑重建等关键功能。重点剖析了模拟PLC执行引擎的扫描周期与能流传递算法,让梯形图逻辑在PC上“活”起来。最后探讨了定时器指令实现、性能优化及项目集成等进阶内容,为工业自动化软件集成提供了灵活高效的解决方案。

weixin_28314575的博客 404

TP4056锂电池充电电路设计原理与工程实践

锂离子电池充电管理是嵌入式电源系统的核心基础技术,其本质是通过恒流恒压(CC/CV)控制策略,匹配电池电化学特性以实现安全、高效、长寿命充放电。TP4056作为典型线性充电IC,以精简外围实现预充、恒流、恒压及自动截止全周期管理,但受限于线性拓扑的热耗散特性,必须协同散热设计、电阻精度选型与PCB布局进行系统级优化。该方案广泛应用于STM32智能小车、便携传感器节点等3.7V单节锂电供电场景,兼顾成本、可靠性与工程可实施性,是入门嵌入式硬件电源设计的关键实践范例。

weixin_36064575的博客 225

深入理解 this 指向与作用域解析

深入理解 this 指向与作用域解析

欢迎来到这里,希望文章能对你有所帮助 1579

反应动力学仿真软件:Kintecus_(11).数据输入与输出解析

在反应动力学仿真软件的二次开发中,数据输入与输出解析是至关重要的步骤。正确地解析输入数据和生成输出结果不仅能够确保仿真过程的顺利进行,还可以提高仿真的准确性和效率。本节将详细介绍如何在仿真软件中实现数据输入与输出的解析,包括文件格式、数据结构、解析方法以及实际操作示例。

kkchenjj的博客 759

JavaScript 的 this 指向问题深度解析

JavaScript 中的 this 指向问题有很多博客在解释,仍然有很多人问。上周我们的开发团队连续两个人遇到相关问题,所以我不得不将关于前端构建技术的交流会延长了半个时候讨论 this 的问题。

幽幽谷 1767

2026国内Claude Code保姆级教程:安装、避坑、防串台全优化

安装 Claude Code CLI + 切换 npm 国内镜像优先配置固定关闭:自动联网、自动项目扫描VSCode 内置终端直接用,不装多余插件会话隔离+指令约束,彻底解决 Rust、小程序 跨语言串台。

lpfasd123的博客 2569

AutosarMCAL开发——基于TC3x系列时钟系统浅析

本文为博主个人学习总结记录,如有不正,欢迎指正。

qq_45583706的博客 889

JS中的作用域链,闭包,this指向全解析

文章目录执行环境与作用域作用域链对比一下原型链与作用域链:闭包什么是闭包?闭包会引起的问题引用的变量发生变化内存泄露问题this指向问题闭包的其他用途利用闭包约束块级作用域 在不久之前,将网上总结的关于闭包的博文大概看了一下,却仍然是云里雾里。事实证明还是自己直接啃书比较好,对照着红宝书,从作用域到闭包在到this,把闭包的原理和应用以及各种坑通过知识点和网上的博文串起来,才总算弄懂闭包的大概。...

wantingtr的博客 643

【100%通过率】华为OD机试真题 Python 实现【最多组合直角三角形个数】【2023 Q1 | 100分】

有N条线段,长度分别为a[1]-a[n]。 现要求你计算这N条线段最多可以组合成几个直角三角形。 每条线段只能使用一次,每个三角形包含三条线段。

MISAYAONE的博客 1万+

揭开迷雾:全面解析JS中的this指向问题

大多数时候this的指向不是在编写时确定的,而是在代码执行时根据函数的调用方式来决定,简单来说,this的指向取决于函数的调用者(箭头函数除外)。

weixin_45092437的博客 1383

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

关于JS中this对象指向问题总结

关于JS中this对象指向问题,相信做过项目的小伙伴多多少少都会遇到过,明明感觉代码写的没问题,可是运行的时候,就会报错,比如报错 xxx is not a function。我最近也遇到了,百度学习了不少前辈对于this对象指向问题的解析,于是总结了这篇文章。

铁锤妹妹的博客 4683

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

this指向与作用域

1、普通函数在对象调用时遵循“谁调用指向谁”2、函数赋值未新定义,只是引用,函数本质是一个对象3、立即执行函数的this指向window。

2401_87407347的博客 681

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JavaScript全解析——this指向

本系列内容为JS全解析,为千锋教育资深前端老师独家创作致力于为大家讲解清晰JavaScript相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【点个关注】持续追更~this 是一个关键字,是一个使用在作用域内的关键字作用域分为全局作用域和局部作用域(私有作用域或者函数作用域)全局作用域中this指向window函数内的 this, 和 函数如何定义没有关系, 和 函数在哪定义也没有关系,只看函数是如何被调用的(箭头函数除外)可分为以下场景:普通函数中的this和全局调用一样,this指向

sdasadasds的博客 632

js的this指向问题和Vue的指向问题详细解析

Vue的this的指向和js的this的指向的问题 - 幕布 Vue的this的指向和js的this的指向的问题js函数的this指向1.1:js中的this指向记住一个原则:一般情况下(箭头函数除外)this是在执行时才能确认,定义时没有办法确认。下面这段代码会是输出什么呢?输出结果:lisi lili zhangsan由上我们可以看出this是在定义的时候才能确认,当然这是...

风一般的男子·小亮仔 3724

Javascript 中 作用域、闭包与 this 指针

js 中的作用域,闭包的理解和运用,this 的理解和运用

博客From宋俊波 7836

【js】this作用域全解析

this作用域问题 一般来说,谁调指谁是一个基本原则,但是这并不是一个非常好的面试回答,虽然从某种程度上,这有助于帮我们判断this指向问题,但是不能涵盖所有的情况,建议从函数调用的4种方式展开 函数式调用 方法调用模式 构造函数调用模式(this指向实例) call、apply、bind 函数式调用 var age = 10 var person = { age:12, say(){...

bye_cherry的博客 1465

吃透 JS 核心:作用域、this 指针与闭包的深度解析

本文深入解析JavaScript三大核心概念:作用域、this指针和闭包。作用域分为全局、函数和块级作用域,涉及变量提升与作用域链机制;this指针根据调用方式动态绑定,包括new、显式、隐式、默认绑定及箭头函数特性;闭包通过内层函数引用外层变量实现数据封装,需注意内存泄漏问题。掌握这些底层机制能提升代码质量,解决90%的面试难题。建议结合实战案例强化理解,将理论转化为编程直觉。

一位搞嵌入式和前端的genius的博客 729

JavaScript “this“指向及习题

this指向四要点01 函数预编译过程(this -->window)02 全局作用域里(this --> window)03 call/apply(改变函数运行时this指向)3.1 定义和使用3.2 应用举例04 谁.function() (function()里面的this指向“谁”,即谁调用的这个方法,this就指向的是谁。)

Yuki_yuhan的博客 1627

js中this指向解析,以及改变this指向的几个方法

在JavaScript中,this的指向是一个非常重要的概念,它决定了函数中的this关键字引用哪个对象。this的指向取决于函数的调用方式。以下是几种常见的情况和改变this。

qq_63176997的博客 1003

【JavaScript 例题】函数作用域、参数传递、this指向

例1: function fn(a, b) { console.log(b); } fn(11); // undefined 例1中,函数传入的值,对应定义的参数位置,所以 ‘11’ 是 a 的参数值,b 则没有值传入。 打印 ‘undefined’ 是因为函数隐式声明了 a, b 变量,而找不到 b 值。 即:fn(a, b) ==> function fn(a, b) { var a,b; }【局部变量】 例2: function fn(a, b) { console.log(b);

iuukai 979

【前端】全面解析 JavaScript 中的 this 指向规则

JavaScript 是现代 Web 开发中不可或缺的编程语言,其灵活性和强大的特性使其在浏览器端和服务器端均占据重要地位。然而,这种灵活性也导致了诸多复杂的语法规则,尤其是关于 this 的动态绑定规则。this 的指向机制作为 JavaScript 中的核心概念之一,不仅广泛应用于面向对象编程,还在函数式编程和事件处理等场景中扮演关键角色。 许多开发者初次接触 JavaScript 时,容易误解或混淆 this 的行为,原因在于其指向是动态的,完全取决于函数的调用方式, 2024.12.9-✍77min

禅宗里有一个词叫做“因缘和合”。 所谓因缘,是指事件要发生所必须的条件。因缘和合就是当你聚集了这件事的一切条件,它就会自然而然的发生。“它就会自然而然的发生”,这种朴素而坚定的价值观让我们感到无比安心,安心到可以不用有任何担心焦虑。 1061

【js】this指向问题

如果一个函数调用是直接调用,比如fn()这样,没有对象.fn(),就说它是默认绑定的,通常默认绑定时,函数中的this指向全局对象(window);但如果getData也是个箭头函数,那么getData函数中使用this的指向 与 外层作用域相同,也是与全局作用域中的this一致,window。箭头函数没有this,也就是不绑定this,如果在箭头函数中使用this,则是根据外层作用域来决定this。通过某个对象进行调用的。this并不会直接出现在对象或类中,只会出现在对象/类的函数中。

nakyoooooo的博客 991
上一篇: 学Python太枯燥?这7部电影让你重燃编程热情,第5部必看!
下一篇: 从IIFE到Tree Shaking:JavaScript模块化发展的8个里程碑
FastProceed
博客等级 码龄1年 143粉丝 2005原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值