JS 中的 this 代表的是当前行为执行的主体。JS 中的 context 代表的是当前行为执行的环境(作用域)。

this 指向和函数定义和执行环境都没有任何的关系,只与执行者(调用者)有关系。

如何判断 this 指向

  1. 函数执行,先看函数名前是否有”.”,如果有,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,解释同上

  1. 2. 自执行函数中的 this 永远是 window
  2. 3. 给元素的某个事件绑定方法,当事件触发时,执行对应的方法,方法中的 this 指向当前的元素
  3. ```javascript
  4. // html
  5. <div id="div1">点我</div>
  6. // js
  7. function fn() {
  8. console.log(this)
  9. }
  10. // fn中的this指向的是#div1
  11. document.getElementById("div1").onclick = fn;

练习题

  1. var num = 20;
  2. var obj = {
  3. num: 30,
  4. fn: (function (num) {
  5. this.num *= 3;
  6. num += 15;
  7. var num = 45;
  8. return function () {
  9. this.num *= 4;
  10. num += 20;
  11. console.log(num);
  12. }
  13. })(num)
  14. };
  15. var fn = obj.fn;
  16. fn();
  17. obj.fn();