Skip to content

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()

一道曾经记录的面试题