js中的this指向

常见的几种情况:

1.全局环境下,this指向window

console.log(this);//全局环境,this指向window

2.定时器、立即执行函数中的this都指向window

setTimeout(function(){
  console.log(this)//window
},1000);

(function(){
   console.log(this);//window
 })()

3.函数自执行

严格模式:undefined

非严格模式:window

      function fn(){
        console.log(this);
      }
      fn()//window

4.事件处理函数:触发事件的元素

谁触发了这个函数执行,this就指向谁

      document.body.click=function(){
        console.log(this);//body
      }

5.obj对象方法

obj.fn()

this指向obj

      var name="456"
      var obj={
        name:'123',
        getName:function(){
          console.log(this.name);
        }
      }
      obj.getName();//obj调用函数执行,this指向obj
      var get=obj.getName;
      get();//函数自执行,指向window

6.call/apply/bind更改this指向

fn.call(新的this指向)

      get.call(obj)//obj
      get.apply(obj)//obj

7.构造函数中的this:指向new出来的实例

      function Student(){
        this.name="小明"
      }
      var stu1=new Student()
      console.log(stu1.name);//小明

8.箭头函数

箭头函数中的this指向定义时的上下文的this,也就是说指向外层作用域this的值,从定义到销毁,函数中的this不发生改变

var title="window"
      var obj1={
        title:"obj",
        fn:()=>{
          console.log(this.title);
        }
        //箭头函数定义在对象中,fn的上下文指向的是obj对象,obj是定义在window中的
        //所以无论fn怎么被调用,其中的this指向的都是window
      }
      obj1.fn();//window
      let getTitle=obj1.fn;
      getTitle()//window

普通函数中的this不在定义的时候确定,而在调用的时候确定,如果函数直接执行,则函数默认走预编译,函数中的this指向window,如果是匿名函数,this从定义的时候就确定了,之后不会发生改变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值