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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете взглянуть на переменная область видимости.
Причина, по которой вы не можете получить к нему доступ, заключается в том, что он определен внутри лямбда-функции .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
Спасибо, это работает, однако, когда я регистрирую имя вне функции, имя отображается пустым, вызов внутри функции регистрирует имя.
@LewisRevel см. обновленный ответ
вы должны объявить переменную перед функцией выборки
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
}
Отвечает ли это на ваш вопрос? В чем разница между использованием «let» и «var»?