<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> <script> window.onload = function () { /** * 全局作用域中 —— window */ a = 21; console.log(this === window) // true console.log(this.a) // 21 console.log(window.a) // 21 // 结论 :window /** * 函数上下文调用 */ // 1. 非严格模式下 —— window function fn() { return this; } console.log(fn() === window); // true // 2. 严格模式下 —— undefined function fn2() { "use strict"; return this; } console.log(fn2()); // undefined // 结论 :非严格模式下函数中的this就是 window;严格模式下是 undefined /** * 对象中的 this */ var obj = { age:20, fun() { return this.age; } } console.log(obj.fun()); // 20 // window.age = undefined var f = obj.fun; console.log(f()); // undefined // 结论 :指向方法所在的这个对象(window也是对象) /** * 原型链中的 this * 原型链中的方法的 this 仍然指向调用它的对象 */ /** * 构造函数中的 this */ function Fun() { this.name = 'Li'; } var o = new Fun(); console.log(o.name); // Li // 结论 : new 构造函数中的this指向新生成的对象 /** * 箭头函数中的 this */ // 于普通函数来说,内部的this指向函数运行时所在的对象,但是这一点对箭头函数不成立。 // 它没有自己的this对象,/* 内部的this就是定义时上层作用域中的this */ // 也就是说,箭头函数内部的this指向是固定的,相比之下,普通函数的this指向是可变的。 } </script> </html>