js this的疑问

为什么this在不同的情况下得到的值不同
<script>

        /*<li class='whh' onclick="test1()" onclick="test2(this)"><a><img src="" alt=""></a></li>*///这样的结构
        var a = document.getElementsByClassName('whh');
        for(var i=0;i<a.length;i++){
            console.log(a[i].getElementsByTagName("img")[0].src)
            a[i].onclick = function (e) {
                console.log(this)//this是li
            }
        }
        function test1() {
            console.log(this)//this是win
        }
        function test2(that) {
            console.log(that)//this是li
        }
    </script>
阅读 2.9k
5 个回答

图片描述

要说明白this,就要先说明白函数(设函数为f())。

每一个函数在执行的时候,都关联着一个上下文对象(可以理解为在哪个对象上执行该函数,这里记为obj)。

其中调用方式有很多, 比如:

  • obj.f(): 最常用的使用点操作符调用函数

  • new f(): 创建一个新的obj, 并且调用函数

  • f.call() 和 f.apply(): 指定某一个特定的obj(第一个参数)

另外,如果没有指定上下文对象的话,比如直接调用f(),那么系统会使用globle,而在浏览器环境中,这个globle就是window对象。

这个上下文对象,就是this。

二楼正解,如果是一个纯函数里面的this,要看谁调用,this就会指向谁,不过在定时器中,this指向的却是window

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题