- this指向分细1.1 thisthis(我们在js中研究的都是函数中的this)JS中的this代表的是当前行为执行的主体JS中的context代表的是当前行为执行的环境(区域)//例如:A 在 饭店 吃 饺子//执行主体就是A 上下文就是饭店 吃饺子就是行为function 吃饺子() { console.log(this);}A.吃饺子()//输出this —> 指A(function() { A.吃饺子()//输出this —>指的还是A})//this是谁 和函数在哪定义的和在哪执行的没有任何关系,就是指执行主体1.2 如何区分this(目前只分析三种 后续会更新)1、函数执行,首先看函数前面是否有’.’,有的话前面是谁,this就是谁,没有的话this指windowfunction fn() { console.log(this) };var obj = { fn: fn };fn()//this—>指windowvar obj = { fn: fn };obj.fn()//this指objfunction sum() { fn()//this—->指window}sum();var oo = { sum: function() { fn()//this —>指window }}oo.sum();2、自执行函数中的this永远是指window3、给元素的的某一个事件绑定方法,当事件触发的时候,执行对应的方法,this是指当前的元素function fn() { console.log(this);}document.getElementById(’#div1’).onclick = fn;//fn中的this —>指 ‘#div1’document.getElementById(’#div1’).onclick = function() { //this —>指 ‘#div1’; fn()//this —>指window}1.3 经典面试题分析var num = 20;var obj = { //对象只是堆内存,不是作用域,想访问变量num,必须是obj.num的形式 num: 30, fn: (function(num) { this.num *= 3; num += 15; var num = 45; return function() { this.num *=4; num +=20; console.log(num) } })(num) //此处传参 是全局变量的num的值20 赋值给了自执行函数的形参 而不是obj的30 如果传入obj下的30 需要写成obj.num}var fn = obj.fn;fn();//输出65obj.fn();//85console.log(window.num);//240console.log(obj.num);//120此题涉及主要知识点如下a、函数内部返回的引用类型的值(函数/对象)被外部变量占用,此函数执行形成的作用域不销毁b、给obj对象赋值的过程中 自执行函数执行 并return 一个函数c、自执行函数的this指向window d、obj.fn fn中的this 指向obje、自执行函数在全局作用下并不进行预解释,但是函数内部执行会形成私有作用域,函数内部会进行预解释f、如果要分析此题,画图是最容易的且最直观的g、在函数执行的过程中 一定要区分this.num 和私有变量num 这个是解答此题的关键h、当前作用域中没有num变量 也没有参数传入 要往上级作用域查找num(如何找也是一个知识点)附示意图动力: 这是我的学习笔记,您能从中得到收获和进步,是我分享的动力,帮助别人,自己也会更快乐期望: 不喜勿喷,谢谢合作!如果涉及版权请及时联系我,马上删除!