对比
情况 | 严格模式 | 非严格模式 |
全局作用域下,普通的this | window | window |
全局作用域下,独立函数中的this | undefined | window |
对象中的函数的this | 调用函数的对象实例 | 调用函数的对象实例 |
构造函数中的this | 构造函数创建的对象实例 | 构造函数创建的对象实例 |
事件绑定中的对象this | 触发该事件的对象 | 触发该事件的对象 |
定时器函数中的this | window | window |
立即执行函数中的this | window | window |
面试题
'use strict';
var name = 'window';
var person1 = {
name: 'person1',
show1: function () {
console.log(this.name);
},
show2: () => console.log(this.name),
show3: function () {
return function () {
console.log(this.name);
};
},
show4: function () {
return () => console.log(this.name);
},
};
var person2 = { name: 'person2' };
person1.show1(); //person1
person1.show1.call(person2); //person2
person1.show2(); // 严格模式为undefined
person1.show2.call(person2); //严格模式为undefined
person1.show4()(); //person1
person1.show4().call(person2); //person1
person1.show4.call(person2)(); //person2
person1.show3().call(person2); //person2
person1.show3()(); //报错