Переменная не станет глобальной

У меня есть переменная в функции, и я хочу вызвать ее вне функции, однако она говорит: «Имя не определено». Пожалуйста, сообщите, как я могу сделать эту переменную глобальной.

n = Math.ceil(Math.random() * 80);
console.info(n)
function randomStarwars(){
    fetch('https://swapi.dev/api/people/'+n)
    .then(response => response.json())
    .then(data=> {
        var Name = data.name

    })
}
addEventListener("click", randomStarwars)
console.info(Name)

Отвечает ли это на ваш вопрос? В чем разница между использованием «let» и «var»?

Tushar Shahi 12.05.2022 12:27

вы должны определить свою переменную вне своих функций - см. мой ответ

Fadi Akkad 12.05.2022 12:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
36
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете взглянуть на переменная область видимости.

Причина, по которой вы не можете получить к нему доступ, заключается в том, что он определен внутри лямбда-функции .then() и доступен только там.

Чтобы он был доступен вне этой функции, вам нужно объявить его вне нее:

n = Math.ceil(Math.random() * 80);
var Name = ""; // Here, for example
console.info(n)
function randomStarwars(){
    fetch('https://swapi.dev/api/people/'+n)
    .then(response => response.json())
    .then(data=> {
        Name = data.name; // Remove 'var', because it's already declared
    })
}
addEventListener("click", randomStarwars)
console.info(Name)

Обновление после вашего комментария:

Вы не видите значение в своем console.info, потому что значение присваивается внутри Обещать, который никогда не запускается правильно при объявлении.

Чтобы эффективно использовать console.infoName, вам нужно связать еще один .then() и зарегистрировать его там:

n = Math.ceil(Math.random() * 80);
var Name = ""; // Here, for example
console.info(n)
function randomStarwars(){
    fetch('https://swapi.dev/api/people/'+n)
    .then(response => response.json())
    .then(data=> {
        Name = data.name; // Remove 'var', because it's already declared
    })
    .then(() => {
        console.info(Name) // This guarantees the value has been set, aside from any errors that might occur before
    })
}
addEventListener("click", randomStarwars)
console.info(Name) // This is executed before the Name is set

Спасибо, это работает, однако, когда я регистрирую имя вне функции, имя отображается пустым, вызов внутри функции регистрирует имя.

Lewis Revel 12.05.2022 12:33

@LewisRevel см. обновленный ответ

GigiSan 12.05.2022 12:41

вы должны объявить переменную перед функцией выборки

var Name = "";
    n = Math.ceil(Math.random() * 80);
console.info(n)
function randomStarwars(){
    fetch('https://swapi.dev/api/people/'+n)
    .then(response => response.json())
    .then(data=> {
         Name = data.name

    })
}
addEventListener("click", randomStarwars)
console.info(Name)

Определите свою переменную вне ваших функций:

var global_Name; // this is your global variable 

n = Math.ceil(Math.random() * 80);
console.info(n)


function randomStarwars(){
    fetch('https://swapi.dev/api/people/'+n)
    .then(response => response.json())
    .then(data=> {
        global_Name= data.name // use it without var

    })
}
addEventListener("click", randomStarwars)
console.info(Name)

function2()
{
global_Name =  // use it without var
}

function3()
{
 global_Name = // use it without var
}

Другие вопросы по теме