let getLowerUpperBoundFromValue=(bound , idToValue)=>{
// Returns the value of the variable previously generated if "value" is a variable name or return "value" if its a number .
// bound : can be a direct integer or a variable name.
// idToValue : contains the id to value mapping which must contain a variable whose name must be equal to 'bound' parameter if its a variable name .
if (isNaN(Number(bound)))
{
Object.entries(idToVarStatesGlobal).forEach(idStatePair=>{
let id= idStatePair[0] , varState = idStatePair[1] ;
if (varState.name===bound){
console.info("check now Returning idTovalue[id]" , idToValue , id , idToValue[id] , Number(idToValue[id]));
return Number(idToValue[id]) ;
}
})
}
else return Number(bound);
}
Когда я веду такой журнал консоли:
console.info('check now: ' , getLowerUpperBoundFromValue(varState.lowerbound , idToValue)) ;
Я получаю такой вывод журнала:
check now Returning idTovalue[id] {PSfCL5hBm: 69} PSfCL5hBm 69 69
inputGeneration.js:99 check now: undefined
Почему функция возвращает значение undefined, хотя Number(idTovalue[id]) возвращает нормальное значение 69?
@Solo: forEach ничего не возвращает, так что это тоже не сильно поможет.
forEach не подходит для поиска индекса / записи в массиве. Вы должны использовать find()



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


Ничего не возвращается, потому что обратный вызов forEach - это отдельный метод. Я удалил вызов .forEach и заменил его циклом for of, который поддерживает возможности для return.
let getLowerUpperBoundFromValue=(bound , idToValue)=>{
// Returns the value of the variable previously generated if "value" is a variable name or return "value" if its a number .
// bound : can be a direct integer or a variable name.
// idToValue : contains the id to value mapping which must contain a variable whose name must be equal to 'bound' parameter if its a variable name .
if (isNaN(Number(bound)))
{
for (let idStatePair of Object.entries(idToVarStatesGlobal)) {
let id= idStatePair[0] , varState = idStatePair[1] ;
if (varState.name===bound){
console.info("check now Returning idTovalue[id]" , idToValue , id , idToValue[id] , Number(idToValue[id]));
return Number(idToValue[id]) ;
}
}
}
else return Number(bound);
}
Потому что этот оператор
returnнаходится внутри обратного вызоваforEach, а не внутриgetLowerUpperBoundFromValue. Возврат из «внутренней» функции не волшебным образом возвращается из внешней функции. Простой пример:function outer() { function inner() { return 'inner'; }; inner(); return 'outer'; }; outer();возвращает"outer".