函数this的指向

一说到函数,我们就要想到this,那么今天我们就来搞懂函数的this指向

函数有两种,一个是普通函数,一个是箭头函数

1.首先我们先来说普通函数

常见的普通函数就是下面这两种(以下代码不是在严格模式下哦):

var fun1=function(){

            console.log(this)

}    
 

function  fun2(){
 

     console.log(this)       

}

fun1()

fun2()

那么当这两个函数直接调用的时候,其中的this就是window,因为普通函数的this指向他的调用者,如果前面没有调用者,那么this的值会是全局对象。在浏览器环境中,全局对象是window。

那我们进阶一下

var obj={
  fun(){

  console.log(this)       

}

}

var fun2=obj.fun

obj.fun()

fun2()

根据刚才说的普通函数的this指向他的调用者,那么obj.fun()中打印的this就是obj了

第二个fun2(),首先他是一个全局的变量,接收的值是obj.fun,那么直接调用的话,其中的this是什么呢,其实还是刚才说的,如果普通函数前面没有调用者,那么this的值会是全局对象。

总结一下,在非严格模式下,没有调用对象的普通函数调用者都是window,即使这个函数是定义在某一个对象上的。而有调用者的则this指向调用者

2.箭头函数

箭头函数是没有自己的this的,那他的this是从哪里来的呢

let fun=()=>{
   console.log(this)

}

fun()

箭头函数自身是没有this,他的this是继承在创建时所处作用域中的this。那么这里fun创建时处于全局作用域中,全局中的this就是window,所以fun执行时打印的this就是window

进阶

let obj={

  a(){
     let fun=()=>{
        console.log(this)

       }

   fun()
 

},

fun2 : ()=>{

  console.log(this)

}

}

obj.a()

obj.fun2()

根据箭头函数this是继承在创建时所处作用域中的this,obj.a()执行的时候,a函数中的this就是obj,而fun是创建时是在a函数作用域中,这个时候a函数作用域中的this是obj,所以执行的fun中打印的this就是obj

obj.fun2(),这个fun2创建时所处的作用域就是全局,所以他的this就是window,所以obj.fun2()打印的this就是window

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_35430208

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值