Где конкретно произошла подмена параметра функции?

ПЕРВЫЙ ВАРИАНТ МОЙ (ОН РАБОЧИЙ):

function f(x) {
  if (x < 0) {
    return 0
  } else {
    if (x < 2) {
      return x * x;
    } else {
      if (x < 5) {
        return 6 - x;
      } else {
        return 1;
      }
    }
  }
}

x = 9 * Math.random() - 2;
document.write('Случайный аргумент: ' + x + '<br>');
document.write('Значение функции: ' + f(x) + '')

ВТОРОЙ ВАРИАНТ С УЧЕБНИКА. МНЕ ЛИЧНО НЕ ПОНЯТЕН: Здесь оглашается переменная z, которая в итоге, выводится вместо аргумента x в функции. Где конкретно z = x?

function f(x) {
  if (x < 0) {
    return 0
  } else {
    if (x < 2) {
      return x * x;
    } else {
      if (x < 5) {
        return 6 - x;
      } else {
        return 1;
      }
    }
  }
}

let z;

z = 9 * Math.random() - 2;
document.write('Случайный аргумент: ' + z + '<br>');
document.write('Значение функции: ' + f(z) + '')


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

Где конкретно z = x?

Нигде. Когда объявляется функция

function f(x) {
  console.log(x);
}

У неё x — название внутренней переменной, котороя всегда будет принимать то значение, которое отправят в неё во время вызова. Её можно назвать как угодно, даже одноименно со внешней переменной. Она всё равно будет другой:

let x = "Mooo...";
let bubu = 15;

f(x);       // внутренний bubu получает значение `x` → "Mooo..."
f(bubu);    // ...получает значение внешнего `bubu` → 15
f(100500);  // ...получает значение 100500

function f(bubu) {
  console.log(bubu);
  bubu = null;
}

console.log("После вызова функции: " + bubu); // 15, внешний bubu не изменился.
// значение null получила только внутренняя переменная функции;

→ Ссылка