what's this? 浅谈js中this的指向问题
刚刚学习js的朋友可能和我一样,看到代码中的this总是一脸懵逼,不知道this到底指向谁。经过一段时间的了解,我想跟大家分享下自己的理解。

2. 场景二:被某个对象调用

3. 场景三:闭包

对场景三的解释说明:大家都清楚闭包的一个特点是可以保留外部函数的变量对象,在场景三的第二个里,我们使用that保存了this的值,this指向object对象,所以that也指向object对象。

何时出现this
函数在调用的时候,会自动获得两个特殊变量:this和arguments,所以,函数可以调用this变量。
this指向谁?
通过一段时间的练习,我觉得可以总结为一句话:this指向他所在函数的作用域对象。如果函数是定义在全局作用域的,那么this指向window,如果函数被某个自定义对象调用,那么this就指向该对象。下面我们通过几个场景进行理解:
- 场景一:定义在全局作用域
function test(){
alert(this);
}
test();
结果:
2. 场景二:被某个对象调用
var O = {
f : function(){
alert(this);
}
}
O.f();
结果:
3. 场景三:闭包
var object = {
getThis : function(){
return function(){
return this;
}
}
}
alert(object.getThis()());
结果:
var object = {
getThis : function(){
var that = this;
return function(){
return that;
}
}
}
alert(object.getThis()());
结果:
对场景三的解释说明:大家都清楚闭包的一个特点是可以保留外部函数的变量对象,在场景三的第二个里,我们使用that保存了this的值,this指向object对象,所以that也指向object对象。
总结
其实this的问题并不复杂,我们只要记住,this指向函数所在作用域的作用域对象,然后平时多练习,就可以知道this指向谁了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构