对于前端开发来说,javascript中的this是一个重点,也是一个难点,简单来说this指的是调用函数的对象,但是在真实运用时又存在了各种上下文环境,让我们不是那么容易分辨这个对象到底是谁,下边我们就几个例子来一起讨论。
1. 函数中的调用
- 最简单的方式1234567var a=10;function test(){var a=20;console.log(this.a)}test()// 输出为10
上面的输出值是10,这是由于test实际上是全局对象window内的一个方法,所以调用test的对象就是window.
- 函数内部的函数1234567891011var a=10;function test(){var a=20;console.log(this.a)function inner(){console.log(this.a)}inner()}test()// 输出为 10,10
这种情况下,test的宿主对象是window,可是其内部的函数inner是找不到宿主对象的,这时候就默认取全局变量window了
- 稍复杂的内部函数123456789101112131415161718var a=10;function test(){var a=20;console.log(this.a);var b={a:40,inner:function (){console.log(this.a);function inner2(){console.log(this.a)}inner2()}}b.inner()}test()//输出 10 40 10
这种情况和上面相同,b.inner调用时宿主对象是inner,其内部的inner2不是通过this.inner2指向b的,所以其内部的this和上边例子的情况就一样了,也是指向window的。