Объявится ли переменная внутри функции, если её имя совпадает с параметром?
На самом деле вместо function trololo(param) {
  console.log(variable);
  var variable = 5;
  console.log(variable);
}
trololo(10);
Получается как-то так:function trololo(param) {
  var variable; // undefined
  console.log(variable);
  variable = 5;
  console.log(variable);
}
trololo(10);
То есть все объявления с var выносятся в начало функции движком js. Называется это hoisting.
Они выполняются в хронологическом порядке, как объявил - так и происходит. При перезаписи - перезаписываются.
func(param) - здесь происходит var param
{
var param = 1; - здесь переназначение
}