this指向问题

本文探讨JavaScript中的this关键字,通过示例解释为何在全局作用域和对象方法中调用函数时,this指向不同的值。当不使用this时,函数查找全局变量name;而当使用this时,this会根据调用方式指向不同对象,如在对象方法中,this将指向该对象。
摘要由CSDN通过智能技术生成

前天面试面试官问了this相关的问题,这里想整理一下,首先看下面这个函数,输出值都是liujie,因为第一个函数调用时在全局作用域下,因此输出全局变量var name = “liujie”,第二个函数调用是,明明是obj对象调用了为神马也输出liujie呢,这里就说起this了

<script>
        var name = "liujie"

        function getName() {
            console.log(name);
        }
        var obj = {
            name: '你好',
            fun: getName
        }

        getName()//liujie
        obj.fun()//liujie
    </script>

如果仅在函数getName中加入this,答案又是什么呢?

    <script>
        var name = "liujie"

        function getName() {
            console.log(this.name);
        }
        var obj = {
            name: '你好',
            fun: getName
        }

        getName() //liujie
        obj.fun() //你好
    </script>

这种差异的原因,就在于函数体内部使用了this关键字。this指的是函数运行时所在的环境。 对obj.fun()来说,函数的调用者是obj,因此this指向obj,而fun(),其运行环境是window全局,这造成了this的指向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值