前言
看了这么多文章,终于到我总结了,本文将从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