можно ли как то в константу передать переменную

Рейтинг: 0Ответов: 3Опубликовано: 23.03.2023

Константа должна использоваться в 2х функциях, поэтому хочу ее объявить глобально, но выдает ошибку msg is not defined.

Константа

const testKB = {
    chat_id: msg.chat.id,
    message_id: msg.message_id,
    reply_markup: {
      inline_keyboard: 
      [
        [{text: 'test',callback_data: 'test'}],
        
      ]
    }
};

могу ли я передать ей msg c того места где я ее использую?

Ответы

▲ 0Принят

Нет, вы не можете передать переменную msg в глобальную константу testKB. Глобальные переменные и константы объявляются вне функций и не имеют доступа к локальным переменным и параметрам функций.

Вы можете передать переменную msg в функцию, которая использует константу testKB, и затем использовать ее внутри этой функции для установки значения поля chat_id в объекте reply_markup. Например:

const testKB = {
  chat_id: null,
  message_id: null,
  reply_markup: {
    inline_keyboard: [
      [{text: 'test', callback_data: 'test'}]
    ]
  }
};

function sendMessage(msg) {
  testKB.chat_id = msg.chat.id;
  testKB.message_id = msg.message_id;
  // Отправка сообщения с клавиатурой
}

// Вызов функции sendMessage с параметром msg sendMessage(msg);

▲ 2

Вместо константы используй функцию и вызывай её в нужных местах передавая msg:

function testKB(msg) {
  return {
    chat_id: msg.chat.id,
    message_id: msg.message_id,
    reply_markup: {
      inline_keyboard: [
        [{ text: 'test', callback_data: 'test' }],
      ],
    },
  };
}
▲ 0

Функция, которая получает данные и присваивает значения объекту, лучший вариант, для заполнения данных.

Однако, если очень нужно, можно обойтись без внешней функции:

const msg = {} // Создадим msg как пустой объект

const testKB = {
  linkMsg: msg, // Передадим linkMsg ссылку на msg
  chat_id: null,
  message_id: null,
  reply_markup: {
    inline_keyboard:
      [
        [{text: 'test',callback_data: 'test'}],

      ]
  },
  applyData: function () { // Функция, которая будет расставлять данные
    this.chat_id = this.linkMsg?.chat?.id;
    this.message_id = this.linkMsg?.message_id;
  }
};

setTimeout(() => {
  msg.chat = {};
  msg.chat.id = 1;
  msg.message_id = 2;
  testKB.applyData();

  console.log(testKB)
}, 2000);

console.log(testKB);

Создадим ключ linkMsg и присвоим ему значение msg(объект).
Так же создадим функцию, которая будет расставлять значения из msg

Как можно увидеть из примера, значения объекта меняются, после изменения объекта msg.