不是说对象内的this都指向该对象吗?
函数调用第一次输出this后返回了fn()函数,fn此时有()会执行。
则此时Person.getFullName()执行完成后值为fn,fn()执行是window调用,所以this指向window
this指向为谁调用指向谁
Person.getFullName() ==> window.fn()
很简单。 只是 fn() 执行 ,并不是this.fn() 执行。 即只是函数执行,非对象函数执行。
每个function函数(非箭头函数)在每次调用时都会在函数内生成一个自己的this。
当两个函数嵌套定义时,内层函数中的this与外层函数中的this是完全独立的。
函数内this的值是在函数调用时才确定的,函数的调用方式不同,this也就不同。
1,当函数直接调用时 fn(); 函数内this的值是window对象,(在js严格模式"use strict";下,函数内this的值是null)
2,当把这个函数赋值给一个对象的方法obj.abc = fn;
调用obj.abc()时,函数内this的值是obj对象,也就是函数所在的对象。
3,当把这个函数赋值给一个dom元素的事件 document.getElementById("id").onclick= fn;
在事件触发时,函数内this的值是触发事件的那个dom元素。
4,当把这个函数作为构造函数使用时 new fn();函数内this的值是一个新创建的对象。
5,当函数以 fn.call(obj); 或 fn.apply(obj); 方式调用时, 函数内this的值是call()或apply()方法的第一个参数。
6,当用 fn2 = fn.bind(obj); 返回一个新的函数。
不论fn2函数用什么方式调用,函数内this的值永远都是bind()方法的第一个参数。
7,如果fn是一个箭头函数 (x)=>{} ,箭头函数内没有自己的this。
如果在箭头函数内使用this,访问的是外层函数的this。
注:如果this在函数外(全局环境)使用等同于 1 的情况。