JavaScript
- 34 ответа
- 0 вопросов
28
Вклад в тег
res.send
отправляет все заголовки и тело, что завершает вес процесс запрос-ответ и закрывает возможность использовать текущий объект res
для отправки чего-либо. В данном случае вам нужно убрать из кода первый вызов res.send
и вы получите "Hello 2". Никаих обходов асинхронности, глобальных переменных и прочего вам не нужно. Переменная res будет и так доступна внутри коллбэка, если вы не перекрываете её где-то в области видимости. makeCounter()
возвращается ссылка на объект фунции, а не на её результат. Так же в данном примере используется замыкание, которое дает возвращаемой функции возможность обращаться к переменной currentCount
, которая нахоится в родительской области видимости.function makeCounter() {
var currentCount = 1;
return function() {
return currentCount++;
};
}
var counter = makeCounter();
var counter1 = makeCounter();
console.log(counter()); //1
console.log(counter()); //2
// счётчики работают независимо друг от друга
console.log(counter1()) //1
makeCounter.foo = "bar"
, абсолютно валидна. Подобный подход используется для создания статических свойств функцииcounter()
this
теряется, если ваш метод вызывается не из экземпляра класса, в котором он объявлен. Нужно использовать bind
, чтобы привязать функцию к экземпляру. const show = element => {
element.classList.add('show');
}
class Modal {
constructor() {
this.modal = document.get...
}
open(endAction) {
show(this.modal);
endAction();
}
}
class Slider {
constructor() {
this.overlay = document.get...;
}
openSlider() {
show(this.overlay);
console.log(this); // Slider
}
openModal() {
const modal = new Modal();
modal.open(this.openSlider.bind(this));
}
}
const show = element => {
element.classList.add('show');
}
class Modal {
constructor() {
this.modal = document.get...
}
open(endAction) {
show(this.modal);
endAction();
}
}
class Slider {
constructor() {
this.overlay = document.get...;
}
openSlider() {
show(this.overlay);
console.log(this); // Slider
}
openModal() {
const modal = new Modal();
modal.open(() => this.openSlider());
}
}