this 绑定问题

97 阅读1分钟

前言

看了这么多文章,终于到我总结了,本文将从node,window,以及规范多角度给大家讲一下this

node

1、node在文件里面this指向的是这个文件的exports(不管是不是严格环境)

// 代码
console.log(this === exports)
console.log(this)
console.log(exports)

// 终端输出
➜  test2 node test.js
true
{}
{}

严格模式依旧没任何改变

// 代码
'use strict'
console.log(this === exports)
console.log(this)
console.log(exports)

// 终端输出
➜  test2 node test.js
true
{}
{}

跟全局global,没一点关系

// 代码
'use strict'
console.log(global)

// 终端输出
➜  test2 node test.js
Object [global] {
  global: [Circular],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  ...


2、但是在function里面,就变成了global,而且在strict环境里面则变成undefind

// 代码
function out() {
    console.log(this)
}

// 终端输出
➜  test2 node test.js
Object [global] {
  global: [Circular],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  ...

严格模式下不绑定this

// 代码
function out() {
  'use strict'
  console.log(this)
}

// 终端输出
➜  test2 node test.js
undefined

此处可以根据this判断是不是严格环境

// 代码
function isStrict() {
  'use strict'
  return !this
}

// 终端输出
➜  test2 node test.js
true