https://segmentfault.com/a/1190000015438195

很有趣的三个简单差异

  1. var a = 1
  2. function test () {
  3. console.log(this.a)
  4. }
  5. test()
  6. // 1
  1. let a = 1
  2. function test () {
  3. console.log(this.a)
  4. }
  5. test()
  6. // undefined
  1. 'use strict'
  2. var a = 1
  3. function test () {
  4. console.log(this.a)
  5. }
  6. test()
  7. // Uncaught TypeError: Cannot read property 'a' of undefined

一、不带任何引用形式的去调用,test()

this指向全局对象。
在非严格模式下,没有其他影响去改变this的时候,this默认指向全局对象(浏览器是window,node是global)。

问题为什么在严格模式下,在方法里的this是undefined??

二、拥有调用者的this,obj.test()

当方法拥有调用者时,谁去调用的,this就绑定在谁身上。

  1. var a = 1
  2. function test () {
  3. console.log(this.a)
  4. }
  5. var obj = {
  6. a: 2,
  7. test
  8. }
  9. var testCopy = obj.test
  10. testCopy()
  11. // obj.test()