JS 中的 this 代表的是当前行为执行的主体。JS 中的 context 代表的是当前行为执行的环境(作用域)。
this 指向和函数定义和执行环境都没有任何的关系,只与执行者(调用者)有关系。
如何判断 this 指向
- 函数执行,先看函数名前是否有”.”,如果有,this 的指向就是”.”前面的调用者,如果没有,this 的指向就是 window。 ```javascript function fn() { console.log(this) } var obj = {fn: fn}
fn() // this -> window obj.fn() // this -> obj
function sum() { fn(); } sum() // this -> window,fn()前面没有调用者,所以是window,跟在哪执行没有关系
var oo = { sum: function() { fn(); } } oo.sum(); // this -> window,解释同上
2. 自执行函数中的 this 永远是 window3. 给元素的某个事件绑定方法,当事件触发时,执行对应的方法,方法中的 this 指向当前的元素```javascript// html<div id="div1">点我</div>// jsfunction fn() {console.log(this)}// fn中的this指向的是#div1document.getElementById("div1").onclick = fn;
练习题
var num = 20;var obj = {num: 30,fn: (function (num) {this.num *= 3;num += 15;var num = 45;return function () {this.num *= 4;num += 20;console.log(num);}})(num)};var fn = obj.fn;fn();obj.fn();
