本题地址: https://github.com/YvetteLau/Step-By-Step/issues/1
全局环境
无论是否在严格模式下,在全局执行环境中(在任何函数体外部)this 都指向全局对象。
函数(运行内)环境
- 简单调用(此调用未设置this)
非严格模式下,this 的值默认指向全局对象。
在严格模式下,this将保持他进入执行环境时的值。如果 this 没有被执行环境(execution context)定义,那它将保持为 undefined。
当一个函数在其主体中使用 this 关键字时,可以通过使用函数继承自Function.prototype 的 call 或 apply 方法将 this 值绑定到调用中的特定对象。(如果传递给 this 的值不是一个对象,JavaScript 会尝试使用内部 ToObject 操作将其转换为对象。) - bind方法
ES5 引入了 Function.prototype.bind。调用f.bind(someObject)会创建一个与f具有相同函数体和作用域的函数,在这个新函数中,this将永久地被绑定到了bind的第一个参数,无论此函数是如何被调用的。 - 箭头函数
在箭头函数中,this与封闭词法环境的this保持一致。在全局代码中,它将被设置为全局对象。 - 作为对象的方法
当函数作为对象里的方法被调用时,它们的 this 是调用该函数的对象。(此概念适用于原型链中的this和getter 与 setter 中的 this) - 作为构造函数
当一个函数用作构造函数时(使用new关键字),它的this被绑定到正在构造的新对象。(手动返回其他对象时,则绑定到返回的这个对象上) - 作为一个DOM事件处理函数
当函数被用作事件处理函数时,它的this指向触发事件的元素(一些浏览器在使用非addEventListener的函数动态添加监听函数时不遵守这个约定)。 - 作为一个内联事件处理函数
当代码被内联on-event 处理函数调用时,它的this指向监听器所在的DOM元素。