Вы можете сделать что-то, как показано ниже, где «области видимости» определены встроенными в вашем теле функции, что эффективно достигает того, что вам нужно.
Они определяются { .. }
непосредственно в вашей функции и вводят новые части лексической / переменной области видимости в вашу функцию, где, например, может быть определена переменная, которая доступна только внутри области действия этого блока.
Исключения могут быть выброшены из этих областей встроенных блоков и будут перехвачены обработчиком catch
, определенным в предыдущей точке в стеке вызовов:
function foo() {
/* Start a block scope in function foo() */
{
/* newAPI only accessible in this block scope */
const newAPI = require("applicationutils");
}
/* Start another block scope, defined in same function foo() */
{
/* newAPI is unique to this block, the newAPI variable name
can be re-used seeing it's unique in the lexical scope */
const newAPI = { getUsers : () => [] };
/* Throwing an exception from block scope is okay - it does not
need to be handled with a catch() clause on this block, and
will be handled by an optional catch() clause lower in the
call stack */
throw new Error('throwing from second block scope in foo()');
}
/* no catch(..) {} clause is syntactically required */
}