一文看懂Javascript的this关键字( 二 )

由于函数是一个单独的值,所以它可以在不同的环境(上下文)执行 。

一文看懂Javascript的this关键字

文章插图
 
4 环境变量JavaScript 允许在函数体内部,引用当前环境的其他变量 。
一文看懂Javascript的this关键字

文章插图
 
上面代码中,函数体里面使用了变量x 。该变量由运行环境提供 。
现在问题就来了,由于函数可以在不同的运行环境执行,所以需要有一种机制,能够在函数体内部获得当前的运行环境(context) 。所以,this就出现了,它的设计目的就是在函数体内部,指代函数当前的运行环境 。
一文看懂Javascript的this关键字

文章插图
 
上面代码中,函数体里面的this.x就是指当前运行环境的x 。
var f = function () {console.log(this.x);}var x = 1;var obj = {f: f,x: 2,};// 单独执行f() // 1// obj 环境执行obj.f() // 2上面代码中,函数f在全局环境执行,this.x指向全局环境的x 。
一文看懂Javascript的this关键字

文章插图
 
在obj环境执行,this.x指向obj.x 。
一文看懂Javascript的this关键字

文章插图
 
回到本文开头提出的问题,obj.foo()是通过obj找到foo,所以就是在obj环境执行 。一旦var foo = obj.foo,变量foo就直接指向函数本身,所以foo()就变成在全局环境执行 。
参考
  • Javascript 的 this 用法
  • JavaScript 的 this 原理

【一文看懂Javascript的this关键字】


推荐阅读