переделал логику и забил.
вдогонку вот такой еще момент:
это код процедуры
initSQLVAR(argument){
let queryVAR = '';
let queryText = '';
if( argument.queryVAR === undefined ) argument.queryVAR = {}
else{ if(argument.queryVAR[argument.table] === true ) return ''; }
//--- перебираем поля таблицы базы данных -----------------------------------------------------
for (let item in global.system.schemaSQL[argument.table]){
let varSQL = '@'+argument.table+'_'+item;
if( argument.queryVAR[argument.table] ){
queryVAR += 'DECLARE '+varSQL+' '+global.system.schemaSQL[argument.table][item].typeData+';\n' }
queryText += (queryText.length === 0 ? '' : ',') + varSQL+'='+item;
}
//---
if( queryVAR.length > 0) queryVAR = "/* декларация переменных*/\n"+queryVAR
//--- присоединение к описанию переменных текста запроса --------------------------------------
queryVAR += '/* запрос инициализации декларированных переменных*/\nselect '+ queryText+' from [dbo].'+ argument.table
if( argument.ROWID !== undefined ) queryVAR += ' where ROWID='+ argument.ROWID;
argument.queryVAR[argument.table] = 'world';
return queryVAR+';\n'
}
в таком варианте когда заходим (глубоко вверху по иерархии ) переменная проинициализированная в false сразу после вызова следующего уровня иерархии принимает значение
argument.queryVAR[argument.table] = 'world';
но если в этом процедуре строку
if( argument.queryVAR[argument.table] ){
заменить на
if( argument.queryVAR[argument.table] === undefined ){
все работает как надо.
понимаю что какой то глюк в коде, но очень странное поведение JS
вопрос снят, thanks