В примере MDN это a, которое указывает на аргументы [0], имеет значение по умолчанию, в то время как в моем вопросе это b, которое не указывает на аргументы [0], имеет значение по умолчанию. Это 2 разных условия.
Либо существует хотя бы один параметр rest / default / destructured, в этом случае присвоение no любым признакам arguments
приведет к изменению связанной переменной, или нет остальных / стандартных / деструктурированных параметров, в этом случае все назначения для любых признаков arguments
приведут к изменению связанной переменной.
Либо каждый индекс arguments
изменит свою связанную переменную, либо ни один не изменит. Таким образом, даже если только b
(arguments[1]
) имеет назначение по умолчанию, когда b
имеет назначение по умолчанию, изменения на arguments[0]
также приведут к изменениям a
.
почему здесь у нас 2 а? Один в блоке, а другой в местном. Так какой из них на самом деле параметр а? А откуда другой a (который не является параметром)?
Я почти уверен, что отладчик Chrome просто запутался, потому что у вас есть var a
, когда a
уже существует в области видимости в качестве параметра. Переменные появляются в разделе «блок», когда они либо
(1) объявлено на верхнем уровне функции (с const
, let
или var
) или
(2) объявлено с const
или let
внутри нефункционального блока
var
перед a
, когда a
уже существует в области видимости, является полностью лишним.