JS -- this相关的练习题

356 阅读1分钟

this是函数执行的主体(谁执行的)

this是谁和函数是在哪儿创建的或者在哪儿执行的都没有必然的联系。

判断this

  • 给元素的某个事件绑定方法,当事件触发方法执行的时候,方法中的this是当前操作的元素。
  • 方法执行,看方法前面是否有点,有点,点前面是谁,this就是谁,没有点this就是window(在严格模式下没有点this是undefined),所有自执行函数的this一般都是window
  • 在构造函数模式执行中,函数体中的this是当前类的实例
var num = 10
var obj = {  //开辟一个堆 AF0
  num: 20
}
obj.fn = (function (num) {  //自执行函数AF1中,形参赋值 num = 20
  this.num = num * 3   //这里的this是window, 所有修改全局num = 20*3 = 60
  num++                //自执行函数AF1中 num = 21
  return function (n) {  //返回一个匿名函数,地址值假设为BF0
    this.num += n
    num++     //这里num的上级作用域是AF1
    console.log(num)
  }
})(obj.num) //这里是一个自执行函数AF1,形成num = 20
var fn = obj.fn  //fn = BF0
fn(5) //22      说明: 这里BF0的形参n = 5, 且BF0中的this为window,所以执行完BF0后,全局的num = 65,AF1中的num = 22
obj.fn(10) //23  说明: 这里BF0的形参n = 10,且BF0中的this为obj,所以执行完BF0后,obj(AF0)中的num = 30,AF1中的num = 23
console.log(num, obj.num) //65, 30