全局环境中的this

function a1(){
    console.log(this)
}
function a2(){
    'use strict';
    console.log(this)
}
a1() //window
a2() //undefined

        这种情况下比较简单直接,函数在浏览器全局环境直接被调用,非严格模式下this指向window,严格模式下use strict情况下指向undefined。

const foo ={
    a:10,
    fn:function(){
        console.log(this)  //window
        console.log(this.a) //undefined
    }
}
let fn1=foo.fn;
fn1() 

       当函数fn作为foo对象的一个方法时,我们将fn赋值给了fn1之后,fn1仍然是在window的全局环境中执行的。所以会输出window和undefined。输出window是因为非严格模式this指向window,输出undefined是因为在fn1中没有a。如果直接输出foo.fn,结果就会不一样了。因为在foo.fn中,this指向的是foo对象。

       综上所述在执行函数时我们不需要考虑显式绑定,如果函数中的this是被上一级的对象所调用的,那么this执行的就是上一级的对象;否则指向全局环境。

    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前路茫茫——何处无香

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值