Вы можете переопределить более высокую область с локальным определением. Но при этом вы больше не можете получить доступ к более высокому уровню.
Когда вы делаете это:
const debug = debug.extend('myfunction');
Вы не можете получить доступ к debug.extend()
, поскольку локальный debug
уже определен, но еще не инициализирован.
Самое простое решение - просто использовать другую именованную локальную переменную. Но если вы не хотите этого делать и хотите сохранить доступ к более высокоуровневому, вы должны сохранить его копию в другой переменной в области блока более высокого уровня, чем там, где вы определяете новую, так что вы затем можно получить доступ к обоим.
const debug = require('debug')('mymodule');
function example() {
// in a scope higher than where we define new debug variable,
// save a copy of it so we can still access it
const oldDebug = debug;
// create another block scope to contain the new debug definition
// and not interfere with saving the previous one above
{
const debug = oldDebug.extend('myfunction');
debug('should be in mymodule.myfunction');
}
}
debug('should be in mymodule');
Другой класс c способ справиться с этим - передать аргумент debug
в вашу функцию и присвоить параметру другое имя. Затем вы можете использовать как новые, так и старые значения.
const debug = require('debug')('mymodule');
function example(oldDebug) {
const debug = oldDebug.extend('myfunction');
debug('should be in mymodule.myfunction');
}
example(debug);
debug('should be in mymodule');