Но когда он достигает функции возврата строки (число) {, ему присваивается номер undefined , поскольку для такого имени ранее не было назначено значение.
Вот недоразумение. Помните: в Javascript почти все является объектом. Некоторые скажут, что многие вещи, с которыми вы регулярно взаимодействуете (строки, числа, логические значения (обратите внимание, как я пишу эти буквы / примитивы / слова первой буквой в нижнем регистре. Я обычно использую прописные буквы для классов и строчные для примитивов)) являются примитивами, а не объектами , Это правда, но для целей этого потока давайте рассмотрим (почти) все объекты.
Давайте вернемся к этому предложению, которое вы написали:
когда он достигает функции возврата строки (число) { ему присваивается неопределенный номер
Вот в чем проблема: когда он достигает строки «return function (number) {}», он фактически возвращает функцию, которая является объектом.
Он не выполняет эту функцию, он только объявляет ее и возвращает как объект.
Вы могли бы написать «вернуть 666», он бы возвратил объект. Номер.
Давайте продолжим.
Ваша переменная «дважды» теперь содержит функцию. Угадай, какой. Вот этот:
функция (число) {
console.log ( 'номер:' + номер)
номер возврата * коэффициент;
}
Помните, вы объявили это и вернули его только в одном утверждении:
"функция возврата (число) {...}"
Ваша переменная "double" теперь эквивалентна именованной функции, которую вы могли бы объявить следующим образом:
функция дважды (число) {
console.log ( 'номер:' + номер)
номер возврата * коэффициент;
}
Да, функции - это Объекты, именованные функции похожи на именованные переменные, а переменные могут быть функциями.
Например, вы можете назвать это так: дважды (9) или так: дважды (5).
Это то, что вы сделали.
Теперь давайте ответим на ваш вопрос:
почему дважды (5) он получает номер выхода: 5?
Потому что:
var double = function (number) {
console.log ( 'номер:' + номер)
номер возврата * коэффициент;
}
И вы выполнили «дважды (5);» который в свою очередь выполнил console.log таким образом:
* * Console.log одна тысяча пятьдесят пять ( 'номер:' + 5); * +1056 *
Насколько я понял, в вашем "множителе функции ()" вы не хотите возвращать функцию, а скорее результат самой этой функции. Я советую вам прочитать о IIFE (выражение для немедленного вызова функции).
С этим вы сможете, только в одном заявлении,:
- объявить функцию
- выполнить эту функцию
- (и в итоге вернуть свой результат)
Получайте удовольствие, играя с Javascript. Javascript великолепен, только когда вы знаете, что происходит.