Ответ 1
"Почему изменение значения
what
меняет значениеarguments[0]
?"
Потому что так оно и работает. Формальные параметры напрямую отображаются в индексы объекта arguments.
То есть, если вы не находитесь в строгом режиме, и ваша среда поддерживает его. Тогда обновление одного не влияет на другое.
function hello(what) {
"use strict"; // <-- run the code in strict mode
what = "world";
return "Hello, " + arguments[0] + "!";
}
hello("shazow"); // "Hello, shazow!"