Я предполагаю, что код на самом деле выглядит так:
this.Tag = function(userConfig,callBack){
function loadConfig(){
lock=false;
/* Do something privately having lock with me */
lock=true;
}
this.load = function(){
if(lock) loadConfig();
else setTimeout(load,1000);
}
return this;
};
Поскольку JavaScript является однопоточным, функция load
не может быть вызвана, пока loadConfig
все еще работает. Это означает, что переменная lock
не может быть false
внутри load
, если:
- В
loadConfig
есть оператор return
, который возвращает выполнение до того, как lock
будет установлено в true
.
- В середине функции возникло исключение, и последняя строка никогда не выполняется.
В последнем случае вы можете использовать блок try/finally
, чтобы убедиться, что lock
сбрасывается в случае исключения:
function loadConfig(){
try {
lock=false;
/* Do something privately having lock with me */
}
finally {
// this will get executed even if an exception is thrown
lock=true;
}
}
Суть в том, что lock
совсем не нужен и может быть полностью удален. load
не может работать одновременно с loadConfig
.
.