Middle+
Υπάρχει κώδικας με IIFE που επιστρέφει ένα αντικείμενο με ένα πεδίο value και μια μέθοδο setValue. Τι θα εμφανιστεί στην κονσόλα μετά την κλήση setValue(2) και την πρόσβαση στο πεδίο value; Τι πρέπει να διορθωθεί ώστε να εμφανίζεται το δύο;
sobes.tech AI
Απάντηση από AI
Рассмотрим пример IIFE, которая возвращает объект с полем value и методом setValue:
const obj = (function() {
let value = 1;
return {
value: value,
setValue(newValue) {
value = newValue;
}
};
})();
obj.setValue(2);
console.log(obj.value); // Что выведет?
В консоли выведется 1, а не 2. Причина в том, что поле value в возвращаемом объекте — это копия значения переменной value на момент создания объекта (то есть 1). При вызове setValue меняется локальная переменная value внутри замыкания, но поле obj.value не обновляется, так как это просто значение, а не ссылка.
Чтобы исправить и получить актуальное значение, можно сделать value геттером:
const obj = (function() {
let value = 1;
return {
get value() {
return value;
},
setValue(newValue) {
value = newValue;
}
};
})();
obj.setValue(2);
console.log(obj.value); // 2
Теперь obj.value — это геттер, который возвращает текущее значение переменной value из замыкания, и после вызова setValue(2) в консоли будет 2.