在JavaScript中,特殊变量 this 相对来说较为复杂,因为它不仅仅只在面向对象设定中出现,其随处可见。这里会解释一下 this 的工作原理以及会引起问题的地方,最佳实践总结。


理解 this,最好的方式是区分被使用的三种类型的位置:


函数内部:this 是一个额外的隐式的参数。

函数外(顶层作用域):this 在浏览器中指向全局对象,Node.js中指向一个模块的暴露接口。

在传递给 eval() 的字符串中:eval() 也许会取得当前 this 的值,或者是将其设置为全局对象,取决于是直接或者间接的调用。


来看一下各个类型。


1. 在函数内部的 this

这是 this 一种最常用的方式,因为在 JavaScript 中,函数以三种不同的角色代表了所有的可调用的结构形式。


确切的函数(this 在松散模式中为全局对象,在严格模式中为 undefined )

构造函数(this 指向新创建的实例)

方法(this 指向方法调用的接受者)

在函数中,this 被常常认为是一个额外的隐式的参数。


1.1 在确切的函数中的 this

在确切的函数中,this 的值依赖于其所在的模式:

查看原文