global?
const a = "globals";
let someObj = {
a: "local",
b: setTimeout( function(){ console.log(this.a)}, 0)
}
someObj.b;
Ну ты просто обращаешься по ключу b
в колбеке таймаута будет this === window
а const a = "globals"; разве не в window?
а если не секрет где? как это область называется в консоле хрома и в ноде?
Const let в какойто отдельной области хранятся и просто так к ним нет доступа по типу window.a. Я только ене помню как эта штука называется да и не важно оно
локальная область видимости
а так почему андефайнд? стелочные функции работают там где описаны, верно? const a = "globals"; let someObj = { a: "local", b: ()=> setTimeout( () => { console.log(this.a)}, 0) } someObj.b();
b() { setTimeout(() => { console.log(this.a) }, 0}
правильно это будет работать, если сделать b обычной функцией
Вроде нет, this после микрозадачи будет глобальным все равно. bind вроде должен такие проблемы решать
Потому что движок не внутри обьекта инициализирует стрелку, а сначало инициализирует обьект const a = {} потом (утрированно): a.b = () => {} и в момент инициализации стрелочной функции в данном примере мы находимся всё там же - в window
каким образом применить бинд на стрелу?)
не, тут про declarative environmental record и lexical environment object имелось ввиду. То есть где хранится в браузере
В смысле сделать b методом не стрелочным, и сет таймаут через bind
😅 а я за ноду топила)
надо b делать обычной функцией, а в таймауте стрелу
или bind(this), одинаково)
как тут говорили.. да, можно чесать левое ухо через правое колено)
bind метод надёжнее и лаконичнее(для меня) , особенно в классах. Так что сравнение некорректно.
ну если хочется пользоваться деструктуризацией, делегированием метода, то да, согласна. тут бы попроще человеку обьяснить, а вы его на амбразуру))
не понял причем тут деструктуризация, я тоже новичок)
если не биндить в круговую, как вы мне сказали, что при делигировании, что при деструктуризации контекст потеряете
Обсуждают сегодня