this指向以及严格模式
基础知识
- 在ES5中:var 命令和 function 命令声明的全局变量会挂到window对象上。
- ES6中:var 命令和 function 命令声明的全局变量依然会挂到window对象上。 let命令、const命令、class命令声明的全局变量,不会挂到顶层对象window上。
总结
- 非严格模式的全局作用域中 var 和 [函数声明以及var函数表达式] 都是绑定到window对象上;
- 但ES6的 let命令、const命令、class命令声明的变量不会绑定到window对象上,而且let、const、class都必须先声明后使用.
严格模式对this影响
顶级作用域的this还是window,但是在函数调用中的this默认指向undefined
js
"use strict";
console.log(this) // window
a = 1 // 不报错,正常【如果是let、const、class就必须先声明后使用】
var a // 变量提升
b = 2 // 报错 Cannot access 'b' before initialization
let b // 没有变量提升
function Fn() {
console.log(this) // undefined
c = 3 // 报错 c is not defined
}
Fn()