Почему метод Date.now() показывает разное время, будучи инициализированным вне функции или внутри

Почему метод Date.now(), если переменная объявлена внутри функции, показывает время примерно на 5 милисекунд позже, чем вне? Связано ли это с тем, что это задержка вызова функции после загрузки?

var nowOuter = Date.now(); 
var nowInner;

function draw() {
  nowInner = Date.now();
  alert("Внеш. время: " + nowOuter + " Внут. время: " + nowInner);
}

document.addEventListener("DOMContentLoaded", function() {
  draw();
});

https://jsfiddle.net/Nata_Hamster/7jkdx5w4/


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

Автор решения: Leonid

Вы правы, вызов draw() будет осуществлен после построения дерева DOM, к тому времени значение переменной nowOuter уже задано и остается неизменным. Легко проверить изменив код:

var nowOuter = Date.now(); 
var nowInner;

function draw() {
  nowInner = Date.now();
  console.log("Внеш. время: " + nowOuter + " Внут. время: " + nowInner);
}

document.getElementById('click').addEventListener('click', function() {
  draw();
});
<button id='click'>Click</button>

А так можно узнать время на построение этого дерева (в миллисекундах с точностью до микросекунды):

let now = performance.now();

document.addEventListener('DOMContentLoaded', function() {
  console.log(performance.now() - now);
});

→ Ссылка