为什么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>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
普通函数执行this指向全局对象,对象方法执行this指向该对象
https://developer.mozilla.org...
https://developer.mozilla.org...
要说明白this,就要先说明白函数(设函数为f())。
每一个函数在执行的时候,都关联着一个上下文对象(可以理解为在哪个对象上执行该函数,这里记为obj)。
其中调用方式有很多, 比如:
obj.f(): 最常用的使用点操作符调用函数
new f(): 创建一个新的obj, 并且调用函数
f.call() 和 f.apply(): 指定某一个特定的obj(第一个参数)
另外,如果没有指定上下文对象的话,比如直接调用f(),那么系统会使用globle,而在浏览器环境中,这个globle就是window对象。
这个上下文对象,就是this。
贴个链接把 http://zonxin.github.io/post/...
二楼正解,如果是一个纯函数里面的this,要看谁调用,this就会指向谁,不过在定时器中,this指向的却是window