JavaScript中函数里this的值到底指向谁?如何理解上下文context?

先看下面的代码:

var f = function(){
	var this_obj = this;
}
var o={name:"o"}
o.f = f;
f();  //此时调用时this_obj的值是window对象
o.f();//此时调用时this_obj的值是o对象

同样都是 f  函数,单独调用时this_obj的值是window对象,通过o对象调用时值确变为了o对象。那么如何理解函数定义是this的值是什么呢?


我的理解:

首先什么是上下文context ?

经常看到很多资料文档都有提到上下文,但是都不是太好理解。现在尝试吧自己的理解写出来,也算是梳理一下。

上下文  我把它理解为当前运行环境,程序运行时,程序的每条语句都有对应的上下文,即运行环境。

//eg1. 定义一个全局变量
var  global_var = "global";
<pre name="code" class="javascript">var this_obj = this;

 

比如上面的eg1. 可以想象一下语句执行前:有个上下文对象,名称是_context,上下文对象是window对象,即:_context= window。

语句执行后,定义了一个全局变量,即 window.global_val 。

这样在接下来的代码使用global_val变量时,就会访问上下文对象中查找相应的变量 _context.global_val。

直接调用函数f(),此时函数体内的上下文对象就是window。

对象o调用f函数,即:o.f()  时,函数体内的上下文对象就是window.o对象。

o.test.f()函数体内的上下文对象就是window.o.test 对象。

this的值就是运行到this代码位置时上下文所对应的上下文对象。函数定义是并没有运行this_obj = this语句,所以函数定义是this_obj对象还未定义,他的值是undefined,需要在函数调用时,边解释边执行,执行this_obj = this时才分析调用函数是的上下文。才能确定this_obj的值。





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值