Замена IIFE ???
Всем привет!
Постараюсь упростить свою задачу и кратко описать суть проблемы. Есть переменная (функция), которая должна возвращать значение другой внешней переменной. Обращаться надо как к простой переменной, т.е. без скобок (собственно в этом и затык). Если без скобок, то это что-то вроде IIFE и получается так: let message = "Hello!"; let res = (() => message)(); console.log(res); И вроде все как надо, но только при изменении внешней переменной мне надо получать это новое значение, а тут остается старое, потому как IIFE так и работает. let message = "Hello!"; let res = (() => message)(); console.log(res); message = "world!"; console.log(res); Может быть есть изврат, чтобы реализовать такую задачу? Заранее спасибо откликнувшимся |
Зачем вам IIFE (Immediately Invoked Function Expression)?
В вашем примере вам даже функция не нужна, достаточно прямого обращения к переменной. |
Цитата:
Это я для упрощения обозначил, что просто обращение к одной внешней переменной, а так-то мне вообще надо этой функцией определенным образом обрабатывать внешние переменные и давать результат. Если изменились переменные, то и другой результат. А обращаться к функции просто по имени без скобок (и не спрашивайте почему). Вот тут дали наводку https://qna.habr.com/q/1253484 |
Цитата:
Рефов в js пока не завезли, геттер на глобальный объект - только с глобальными переменными и сработает. |
Функция ВСЕГДА вызывается со скобками, а в вашем примере запись
let message = "Hello!"; let res = (() => message)(); равнозначна let message = "Hello!"; let res = message; Так что получается, "res" - это не функция а еще одна строка. И при изменении "message", она естественно остается прежней. Но если для вас не принципиально использование функции, то вы можете заменить её на свойство: let message = "Hello!"; Object.defineProperty(this, 'res', { get() { //Здесь, если нужна, какая то логика return message; } }); console.log(res); message = "world!"; console.log(res); |
Часовой пояс GMT +3, время: 21:50. |