You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中this关键字解析:为何调用函数时返回window?

JavaScript中this默认绑定的规则解析

首先纠正一个核心误解:函数内部的变量环境(比如你定义的x:3)和this的指向完全无关。this是一个特殊关键字,它的指向由函数的调用方式决定,而非函数自身的作用域或内部变量。

你的代码为什么输出window?

当你直接以hey()这种形式调用函数时,触发了JavaScript的默认绑定规则:

  • 在非严格模式下,独立调用的函数(没有通过对象的.或[]调用,也没有用call/apply/bind指定),this会自动绑定到全局对象(浏览器环境中就是window)。
  • 如果开启严格模式(在函数顶部加'use strict'),这种情况下this会变成undefined。

你的代码示例中,hey是一个独立的函数,没有作为任何对象的方法调用,所以触发默认绑定,this指向window。

为什么你以为会输出{x:3}?

你混淆了函数的作用域和this的指向:

  • 函数内部的const x=3是存储在函数的局部作用域(变量环境)中的,这个作用域是封闭的,外部无法直接访问,也和this没有关联。
  • this指向的是调用函数的那个"宿主对象",只有当函数作为某个对象的方法调用时(比如obj.hey()),this才会指向该对象。比如:
const obj = {
  x: 3,
  hey: function() {
    console.log(this); // 输出{x:3, hey: ƒ}
  }
};
obj.hey();

再梳理this的核心绑定规则

this的指向完全由调用方式决定,常见场景总结:

  • 默认绑定:独立调用函数 → 非严格模式指向全局对象,严格模式为undefined
  • 隐式绑定:通过对象调用函数(obj.fn())→ this指向该对象
  • 显式绑定:用call/apply/bind指定this → 指向传入的对象
  • new绑定:用new调用构造函数 → this指向新创建的实例对象

内容的提问来源于stack exchange,提问作者Jisang Seo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:45:01