Просматривая тему в MDN Web Docs, я наткнулся на пример
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
var promise1 = new Promise((resolve, reject) => {
resolve('Success!');
});
promise1.then(function(value) {
console.info(value);
// expected output: "Success!"
});Я новичок в JS и сомневаюсь, что аргумент передается в функции внутри promise1.then().
Ранее мы передали строку «Успех!» в методе resolve(). Но мы не указали заранее, какие данные мы назначаем переменной value (которая передается в console.info()). Интуитивно, не следует ли нам явно определить var value = /* Data from Promise.resolve() */ для того, чтобы сначала определить, какие данные несет value, а затем передать их в console.info()?
В противном случае я могу просто изменить имя value на любое, скажем, myVar, и получить тот же результат: запись в журнал «Успех!». к консоли.
Я пробовал погуглить, но это не помогло, так как я не знаю, к какой теме JS относится мой вопрос. Так что предлагайте, пожалуйста, соответствующий материал. Спасибо!



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


We earlier passed the string 'Success!' in the resolve() method. But we did not specify before-hand what data we are assigning to the value variable (which is being passed in the console.info() ).
Значение, которое передается в аргумент функции, определяется функцией когда ты звонишь.
Код, который его вызывает, является частью библиотеки Promise (т.е. написан кем-то другим). Уточнили, каким оно должно быть.
Intuitively, shouldn't we have explicitly defined var value = /* Data from Promise.resolve() */
Нет. Люди, написавшие библиотеку Promise, это уже сделали.
Otherwise, I can just change the name value to anything
Да. Имена аргументов не определяют значения того, что в них передается. Позиции делают.
Хорошо. Могу ли я увидеть код, написанный в этой библиотеке?
@SunitGautam - Зависит от библиотеки. Должно быть довольно легко найти, если вы используете автономную библиотеку Promise, такую как Bluebird, сложнее, если вы используете встроенную в Firefox (потому что Firefox имеет много исходного кода) и, вероятно, невозможно, если вы используете собственный встроен в Edge (что не является открытым исходным кодом, AFAIK).
value - это просто имя, которое вы дали первым аргументом функции обратного вызова обработчика .then(). Вы можете называть его как хотите. Какое бы имя вы ему ни дали, он получит значение первого аргумента обработчика .then(). Это верно для всех функций. Вы можете называть аргументы как хотите, и это не меняет того, какое значение они получают при вызове.
Otherwise, I can just change the name value to anything, say, myVar and get away with the same result: logging "Success!" to the console.
Да, вы можете изменить имя аргумента как хотите. Какое бы имя вы ему ни дали, он получит первый аргумент при вызове функции. Именно вызывающая сторона определяет, какое значение будет иметь аргумент. Это объявление функции, которое определяет, какое имя будет иметь этот первый аргумент внутри функции, чтобы вы могли ссылаться на этот первый аргумент функции.
В этом случае функция вызывается внутренними компонентами библиотеки обещаний, и когда она вызывает функцию обратного вызова .then(), она передает в качестве первого аргумента разрешенное значение обещания, которое в вашем случае является строкой "Success!".
I can just change the name value to anything, say, myVar and get away with the same resultАга. Это просто аргумент - вы можете назвать его как хотите и получить тот же результат. (это то, что делают минификаторы)