【什么是this?】
this是一个使用在作用域内部(块级作用域、函数作用域、全局作用域)的关键字。
this关键字是函数运行时自动生成的一个内部对象.只能在函数内部使用.总指向调用它的对象。
(全局很少使用,大部分在函数内部使用。)
【this指向】
根据运行时的不同,this指向的对象有所区别。
在绝大多数情况下,函数的调用方式决定了this的值。
浏览器环境/全局环境下使用this: this指向window对象。
console.log( this ); //Window
console.log( this === window ); //true
在函数中使用this:
不管函数怎么定义,不管函数在哪定义,只看函数的调用(箭头函数除外)。
定时器
【setTimeout和setInterval的区别】
timeout:(体育比赛中的)暂停;超时;
interval: 间隔;间隙。
使用setTimeout()开启的定时器,“时间”一到代码就会执行。
即用来指定某个函数或某段代码在多少毫秒之后执行。
使用setInterval(()开启的定时器,“时间间隔”一到代码就会执行一次。
即每隔一段时间执行一个函数。
使用clearTimeout(()和clearInterval(()可以清除定时器。
setTimeout指定的代码,必须等到本次执行的所有同步代码都执行完,才会执行。
<script>
setInterval(function(){
console.log(4);
},1000)
// 使用clearTimeout(()和clearInterval(()可以清除定时器。
// 第一种情况:
console.log(1);
setTimeout(function(){
console.log(2);
},10)
console.log(3);
// 第二种情况:
console.log("A");
setTimeout(function(){
console.log("B");
},0)
console.log("C");
</script>
this的指向
<script>
// 在函数中使用this:
// 不管函数怎么定义,不管函数在哪定义,只看函数的调用(箭头函数除
// 普通函数(直接调用/全局调用):this指向window
// 函数名()
function fn() {
console.log(this); //Window}
fn() //普通调用,this指向window
// 定时器函数:this指向window
// setTimeout(function(){},0)
// setInterval(function(){},0)
setTimeout(fn,0)//把fn函数当作定时器处理函数使用
// 自执行函数:this指向window
// (function(){})()
// 对象调用函数:this指向的是xxx对象
// xxx.函数名():
// Math.random():
// 问:a.b.c(()函数中的this指向是? 答:a.b
var obj = {
// 把fn存储的地址赋值给了obj的f成员
// 从现在开始obj.f和全局变量的fn指向同一个函数空间
f:fn,
name:'我是obj对象'
}
obj.f()//d对象调用,this指向obj。
setTimeout(obj.f,0) // 把obj.f函数当作定时器处理函数使用
// 事件处理函数:this指向的是事件源(绑定在谁身上的事件)// xxx.onclick = function(){}
// xxx.addEventListener('',function(){})
}
</script>