this

this указывает на владельца функции, внутри которой он обозначен

1
function myFunction() {
return this;
}
- внутри функции this указывает на владельца функции, которым является глобальный объект
2
var person = {
	firstName: "John",
	lastName "Doe",
	fullName: function() {
		return this.firstName + " " + this.lastName;
	}
}
document.write(person.fullName());
- владельцем функции является объект person: используется для связывания методов и свойств объекта
3
var person1 = {
	fullName: function() {
		return this.firstName + " " + this.lastName;
	}
}
var person2 = {
	firstName:"John",
	lastName: "Doe",
}
var text = person1.fullName.call(person2);
document.write(text);
- при вызове person1.fullName с объектом person2 в качестве параметра с помощью метода call(), this будет обращаться к объекту person2
4
<button onclick="this.style.display='none'">
	Нажми на меня, и я исчезну!
</button>
- в обработчике события HTML this указывает на HTML элемент, получивший это событие

let

позволяeт декларировать переменные с областью видимости внутри блока

1. Область видимости внутри блока { }
{ var x = 2; }
document.write("Результат: " + x);
{ let x = 2; }
document.write("Результат: " + x);
2. Область видимости внутри цикла
var i = 2;
document.write("Внутри цикла: ");
for(var i = 0; i < 5; i++){
	document.write(i + ", ");
}
document.write("Вне цикла: " + i);
var i = 2;
document.write("Внутри цикла: ");
for(let i = 0; i < 5; i++){
	document.write(i + ", ");
}
document.write("Вне цикла: " + i);
3. Передекларирование переменных
var x = 10;
{ var x = 2; }
document.write("Результат: " + x);
var x = 10;
{ let x = 2; }
document.write("Результат: " + x);
var x = 10;	// Можно
let x = 2;	// Нельзя
let x = 10;	// Можно
var x = 2;	// Нельзя
let x = 10;	// Можно
let x = 2;	// Нельзя
4. Поднятие переменных
x = 2;
var x;
document.write("Результат: " + typeof(x));
x = 2;
let x;
document.write("Результат: " + typeof(x));

const

позволяeт декларировать константы с областью видимости внутри блока

1. Область видимости внутри блока { }
{ var x = 2; }
document.write("Результат: " + x);
{ const x = 2; }
document.write("Результат: " + x);
2. Присваивание во время декларации
const PI = 3.14;
document.write("Результат: " + PI);
const PI;
PI = 3.14;
document.write("Результат: " + PI);
3. Можно изменять свойства константных объектов, но нельзя присвоить новое значение
const car = {type:"Fiat", color:"white"};
car.color = "red";
document.write("Результат: " + car.color);
const car = {type:"Fiat", color:"white"};
car = {type:"Volvo", color:"red"};
document.write("Результат: " + car.color);
4. Можно изменять константные массивы, но нельзя присвоить им новый массив
const cars = ["Saab", "Volvo", "BMW"];
cars[0] = "Toyota";
document.write("Результат: " + cars[0]);
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"];
document.write("Результат: " + cars[0]);
4. Передекларирование констант
var x = 10;	// Можно
const x = 2;	// Нельзя
const x = 10;	// Можно
var x = 2;	// Нельзя
const x = 10;	// Можно
const x = 2;	// Нельзя
5. Поднятие констант
x = 2;
var x;
document.write("Результат: " + typeof(x));
x = 2;
const x;
document.write("Результат: " + typeof(x));