Урок 18 из 25
В прогрессе

18) Таймеры. this

Функция setTimeout

Для одноразового выполнения действий через промежуток времени предназначена функция setTimeout(). Она может принимать два параметра:

				
						
const timerId = setTimeout(someFunction, period)
function printMessage() { console.log("Hello METANIT.COM");}
setTimeout(printMessage, 5000);
				
			

Для остановки таймера применяется функция clearTimeout(), в которую передается id таймера:

				
					function printMessage() { console.log("Hello METANIT.COM");}
const timerId = setTimeout(printMessage, 5000);
clearTimeout(timerId);
				
			

Функция setInterval

Функции setInterval() и clearInterval() работают аналогично функциям setTimeout() и clearTimeout() с той лишь разницей, что setInterval() постоянно выполняет определенную функцию через промежуток времени.

Например, напишем небольшую программу для вывода текущего времени:

				
					const timer = document.getElementById("timer");
function updateTime() {
    const now = new Date();
    timer.textContent = `${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`;
}
setInterval(updateTime, 1000);
				
			

Глобальный контекст и объект globalThis

В глобальном контексте this ссылается на глобальный объект. Что такое «глобальный объект» в JavaScript? Это зависит от среды, в которой выполняется код. Так, в веб-браузере this представляет объект window — объект, который представляет окно браузера. В среде Node.js this представляет объект global. А для веб-воркеров this представляет объект self

Например, в веб-браузере при выполнении следующего кода:

				
					console.log(this);
				
			

В стандарт ES2020 было добавлено определение объекта globalThis, который позволяет ссылаться на глобальный конекст вне зависимости, в какой среде и в какой ситуации выполняется код:

				
					console.log(globalThis);
				
			

Контекст функции

В пределах функции this ссылается на внешний контекст. Для функций, определенных в глобальном контексте, — это объект globalThis

				
					function foo(){
    var bar = "local";
    console.log(this.bar);
}
 
var bar = "global";
 
foo();  // global
				
			

Контекст объекта

В контексте объекта, в том числе в его методах, ключевое слово this ссылается на этот же объект:

				
					const obj = {
    bar: "object",
    foo: function(){
        console.log(this.bar);
    }
}
var bar = "global";
obj.foo();  // object