一、this关键字
【什么是this?】
this是一个使用在作用域内部(块级作用域、函数作用域、全局作用域)的关键字。
this关键字是函数运行时自动生成的一个内部对象,只能在函数内部使用,总指向调用它的对象。
(全局很少使用,大部分在函数内部使用。)
【this指向】
根据运行时的不同,this指向的对象有所区别。
在绝大多数情况下,函数的调用方式决定了this的值。
浏览器环境/全局环境下使用this:this指向window对象。
console.log(this); //window
console.log(this === window); //true
二、函数中的this指向
在函数中使用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指向window。
// 对象调用函数: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(){})
箭头函数不同于传统JavaScript中的函数,箭头函数没有自己的this。
它所谓的this是捕获其所在上下文的this的值,作为自己的this值。
三、定时器
【setTimeout和setInterval的区别】
timeout:(体育比赛中的)暂停:超时;
interval:间隔:间隙.
使用setTimeout()开启的定时器,"时间"一到,代码就会执行。
即用来指定某个函数或某段代码在多少毫秒之后执行。
setInterval()开启的定时器,"时间间隔"一到,代码就会执行一次。
即每隔一段时间执行一个函数。
setTimeout (function(){
console.log(4);
},2000)
【题目:最后的打印顺序是什么?】
第一种情况
console.log(1);
setTimeout(function(){
console.log(2);
},10)
console.log(3); // 1,3,2
第二种情况
console.log("A");
setTimeout(function(){
console.log("B");
},0)
console.log("C"); // A,C,B
setTimeout指定的代码,必须等到本次执行的所有同步代码都执行完,才会执行。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了this关键字,函数中的this指向,定时器