// лексическое окружение это все переменные
// которые доступны в момент создания функции
const lexEnv = 42
const lexEnv2 = 32
const lexEnv3 = 16
const lexEnv4 = 4
// создаём функцию
function fn() {
console.log([
lexEnv, // эта переменная взята из окружения
this,
this.field + lexEnv
])
}
const obj1 = {
field: 8,
myFn: fn
}
obj1.myFn() // здесь this становится равен obj1, this.field === 8
// пример другого this
let obj2 = {
field: 100
}
obj2.myFn2 = obj1.myFn
// если мы использовать функцию как метод другого объекта
obj2.myFn2() // здесь this становится равен obj2, this.field === 100
this
.function outer() {
var a = 1; // переменная в лексическом окружении ф-ии inner()
// внутри inner() можно использовать значение a
return function inner() {
console.log("a == ", a, "this == ", this);
}
}
var f1 = outer(); // f1 - функция
f1(); // a == 1, this == window или self
var f2 = f1.bind({title: "Ololo"}); // f2 - новая функция
f2(); // a == 1, this.title == "Ololo"