面试题:说说你对 JS 中 this 指向的了解

面试题:说说你对 JS 中 this 指向的了解

JS 的代码执行环境分为严格模式和非严格模式 ,可以通过 use strict 打开严格模式,此时 JS 在语法检查上会更加严格。要讨论 JS 中的 this 指向问题,也要分为严格模式和非严格模式进行讨论。这里先讨论非严格模式下的 this 指向,然后再讨论严格模式下的不同之处,未谈到的地方默认与严格模式相同。

非严格模式下的 this 指向

  1. 函数独立调用 :此时函数中的 this 指向全局对象(浏览器环境是 window,Node.js 环境是 globalThis

  2. 函数作为对象的方法调用 :此时函数中的 this 指向该对象。

  3. 函数通过 callapply 调用callapply 方法可以用于直接调用函数,同时指定 this 和传入参数。

    如果 callapply 传入的表示 this 的参数不是对象(原始值),其会被隐式转换为对应的包装对象。

    js 复制代码
    const obj = new Object();
    fun_name.call(obj, param1, param2,...); // 调用 fun_name 函数,同时指定 this 为 obj,传入多个参数
    fun_name.call(obj, [parm1, param2, ...]); // 调用 fun_name 函数,同时指定 this 为 obj,传入一个数组参数
  4. 调用经 bind 生成的函数bind 方法可以生成一个新的函数,同时指定新函数的 this

    如果 bind 传入的表示 this 的参数不是对象(nullundefined),其会被隐式转换为全局对象 windowglobalThis

    js 复制代码
    const obj = new Object();
    const new_fun = fun_name.bind(obj); // 生成一个新函数,同时指定新函数中的 this
    new_fun();
  5. 调用 new 构造函数 :此时构造函数中的 this 指向创建的新对象。

  6. 箭头函数调用 :箭头函数没有自己的 this,其使用 this 时会捕获其声明位置的上下文中的 this

  7. 时间处理函数调用 :此时函数中的 this 通常指向触发事件的 DOM 元素。

注意:这里的函数默认是非箭头函数。

严格模式下的 this 指向

  1. 函数独立调用 : 此时 this 指向 undefined
  2. callapplybind 相关的函数调用 :如果 callapplybind 传入的表示 this 的参数不是对象(nullundefined),其会仍会保持为原始值。(该是啥就是啥)
相关推荐
艾莉丝努力练剑1 小时前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
工业甲酰苯胺5 小时前
TypeScript枚举类型应用:前后端状态码映射的最简方案
javascript·typescript·状态模式
倔强青铜35 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
u_topian6 小时前
【个人笔记】Qt使用的一些易错问题
开发语言·笔记·qt
珊瑚里的鱼6 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
AI+程序员在路上6 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt
xingshanchang6 小时前
Matlab的命令行窗口内容的记录-利用diary记录日志/保存命令窗口输出
开发语言·matlab
Risehuxyc6 小时前
C++卸载了会影响电脑正常使用吗?解析C++运行库的作用与卸载后果
开发语言·c++
AI视觉网奇7 小时前
git 访问 github
运维·开发语言·docker
不知道叫什么呀7 小时前
【C】vector和array的区别
java·c语言·开发语言·aigc