Trying to understand Millis() better.

I have been trying to use millis() instead of delays for some time and I have a few questions.
The first question is there any significant difference between the 2 functions below. And the second question is how can I use millis() either globally or across multiple functions?

void function1()
{
  unsigned long currentTime = millis();
  if (currentTime - previousTime > interval)
  {
    previousTime = currentTime;
    //do stuffy here
  }
}

void function2()
{
  if (millis() - previousTime > interval)
  {
    previousTime = millis();
    //do stuff here
  }
}

There is no fundamental difference between the two functions as previousTime in the second one is set to millis() as the first action in the if code block. The function below, however, may be less accurate depending on how long the stuff you do takes

void function3()
{
  if (millis() - previousTime > interval)
  {
    //do stuff here
    previousTime = millis();
  }
}

The version below is, however, regarded as more accurate as it avoids the problem

void function4()
{
  if (millis() - previousTime > interval)
  {
    //do stuff here
    previousTime += interval;
  }
}