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
相关产品推荐
相关产品推荐

