"Имена" аргументов функции объявляются локальными переменными "автоматически".
Запись
function f (a, b, c, d)
{
// код
}
почти равносильна записи
function f ()
{
var a = arguments[0];
var b = arguments[1];
var c = arguments[2];
var d = arguments[3];
// код
}
При вызове f(90, 91, 92, 93) в обоих вариантах будет одно и тоже, и по результату, и по исполнению.
Если вызвать f() "без параметров", ничего по исполнению не изменится, значением локально объявленных переменных "a, b, c, d" будет undefined.
=======================================================
В примере
function f(h)
{
y = {a:100, b:100};
};
f(); // вызываю ф-ю без всяких параметров, объект ссылка на который хранится в переменной y, не
// только "будет создан", но и доступен за пределами ф-ции, т.к. он относиться к
// "глобальному контексту" (объявлен без var!)
WScript.Echo(y.a + "----" + y.b); // увидим 100 ---- 1000
Переменная "y" в функции объявлена без ключевого слова "var", при таком объявлении она "записывается" в глобальный контекст, и соответственно доступна после вызова функции.
Эта запись почти равносильна
function f()
{
var h = arguments[0]; // вот оно
y = {a:100, b:100};
};
f(); // вызываю ф-ю без всяких параметров, объект ссылка на который хранится в переменной y, не
// только "будет создан", но и доступен за пределами ф-ции, т.к. он относиться к
// "глобальному контексту" (объявлен без var!)
WScript.Echo(y.a + "----" + y.b); // увидим 100 ---- 1000
Во примере
function f(y) // вот здесь НЕ ПОНЯТНО
{
y = {a:100, b:100};
};
f();
WScript.Echo(y.a + "----" + y.b); // выдаст ошибку
Переменная "y" объявлена в локальном контексте путём указания её в круглых скобочках как имя первого аргумента функции. Эта запись почти равносильна следующей
function f() // вот здесь ВСЁ ПОНЯТНО
{
var y = arguments[0]; // вот оно
y = {a:100, b:100};
};
f();
WScript.Echo(y.a + "----" + y.b); // выдаст ошибку