您的位置:首页 > Web前端 > JavaScript

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

2015-12-01 18:11 573 查看
先看下面的代码:

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的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: