Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2023, 16:25
Новичок на форуме
Отправить личное сообщение для stig85 Посмотреть профиль Найти все сообщения от stig85
 
Регистрация: 02.11.2014
Сообщений: 6

Замена 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);


Может быть есть изврат, чтобы реализовать такую задачу?
Заранее спасибо откликнувшимся
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2023, 16:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

Зачем вам IIFE (Immediately Invoked Function Expression)?
В вашем примере вам даже функция не нужна, достаточно прямого обращения к переменной.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2023, 17:29
Новичок на форуме
Отправить личное сообщение для stig85 Посмотреть профиль Найти все сообщения от stig85
 
Регистрация: 02.11.2014
Сообщений: 6

Сообщение от Nexus Посмотреть сообщение
Зачем вам IIFE (Immediately Invoked Function Expression)?
В вашем примере вам даже функция не нужна, достаточно прямого обращения к переменной.
Не, ну функция-то мне конечно нужна )
Это я для упрощения обозначил, что просто обращение к одной внешней переменной, а так-то мне вообще надо этой функцией определенным образом обрабатывать внешние переменные и давать результат. Если изменились переменные, то и другой результат. А обращаться к функции просто по имени без скобок (и не спрашивайте почему).
Вот тут дали наводку https://qna.habr.com/q/1253484
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2023, 19:09
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Цитата:
А обращаться к функции просто по имени без скобок
Как там тебе уже ответили - функция без скобок - не функция, а переменная.

Рефов в js пока не завезли, геттер на глобальный объект - только с глобальными переменными и сработает.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 17.02.2023, 11:49
Новичок на форуме
Отправить личное сообщение для SanGorych Посмотреть профиль Найти все сообщения от SanGorych
 
Регистрация: 13.06.2021
Сообщений: 2

Функция ВСЕГДА вызывается со скобками, а в вашем примере запись
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);

Последний раз редактировалось SanGorych, 17.02.2023 в 11:58.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена символа косой черты lysenkora Общие вопросы Javascript 2 17.01.2022 15:03
Цикличная замена ссылок nikofedorov Общие вопросы Javascript 0 19.02.2020 00:28
Замена тегов Kost-iv Events/DOM/Window 4 01.11.2015 17:12
Замена изображения zarobo1 Общие вопросы Javascript 1 30.08.2013 08:59
Замена запятой на точки для проверки цифр с дробью Telnet Общие вопросы Javascript 7 22.07.2013 11:33