JS Guide JS Guide
首页
  • JS 部分
  • HTML 部分
  • CSS 部分
  • Vue
  • React & Angular
  • 数据结构、算法、OS
  • 计网、浏览器
  • 杂项
笔试
面试
资源
资讯
  • 关于本站
  • 更新历史
  • 贡献指南
  • 文档规范
  • 常见问题
GitHub (opens new window)
首页
  • JS 部分
  • HTML 部分
  • CSS 部分
  • Vue
  • React & Angular
  • 数据结构、算法、OS
  • 计网、浏览器
  • 杂项
笔试
面试
资源
资讯
  • 关于本站
  • 更新历史
  • 贡献指南
  • 文档规范
  • 常见问题
GitHub (opens new window)
  • 面试相关说明
  • 解释代码题

    • 隐式转换问题
    • this 指向问题
      • 1 字节:解释以下代码的输出
    • Promise 与异步执行问题
  • 手撕代码题

  • 个人相关

  • 面试相关
  • 解释代码题
卡洛
2022-11-02
目录

this 指向问题

参考知识点:

  • JS 知识点 - this 指向

# 1 字节:解释以下代码的输出

var name = "bytedance";
function A() {
  console.log(age);
  this.name = 123;
  var age = 2;
  console.log(this.name)
  console.log(this.age);
}
A.prototype.getA = function(){
  console.log(this.name);
  console.log(this);
}
let a = new A();
let funA = a.getA;
funA();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
undefined
123
undefined
bytedance
Object [window]
1
2
3
4
5
  • 第 13 行,new 一个 A 的实例,程序开始执行 A()
  • 第 3 行,由于第 5 行的变量声明 var age 被提升至 函数顶端,因此此处 输出 undefined
  • 第 6 行,判断 this 指向的是 a 实例,此处 输出定义的 this.name 即 123
  • 第 7 行,由于 this 指向的 a 实例没有 name 属性,因此此处 输出 undefined
  • 第 14 行,将 a.getA 作为一个函数对象赋值给变量 funA 并在第 15 行直接调用,程序开始执行 getA()
  • 第 10 行,判断 this 指向的是全局对象 window,因此此处 输出全局对象的 name 属性,而 var 定义的全局变量为全局对象的属性,即输出 "bytedance"
  • 第 11 行,同上,此处 输出全局对象 window

提示

函数对象自带 name 属性,且值为本身的名称,如 A.name 返回 "A"。

在 GitHub 中编辑此页 (opens new window)
上次更新于: 2022/11/3 23:25:22
隐式转换问题
Promise 与异步执行问题

← 隐式转换问题 Promise 与异步执行问题→

Theme by Vdoing | Copyright © 2022-2022 Carlo | Powered by VuePress
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式