Javascript: пока переменная объявлена в глобальной области видимости, она остается неопределенной внутри функции

#javascript

#javascript

Вопрос:

Хотя я определяю starttime переменную без var ключевого слова, делая ее глобальной, запись starttime в консоль выдает undefined .

  starttime = new Date();

setInterval(function(starttime){
    getTimeElapsed(starttime);
}, 1000);
  

Как я могу получить доступ к starttime переменной внутри функции?

Комментарии:

1. Думаю, для начала было бы неплохо не переопределять ее в аргументах функции.

2. Определение в сигнатуре функции означает, что когда тайм-аут вызывает функцию, для нее устанавливается starttime значение undefined в этой области. Удалите имя переменной из подписи функции.

Ответ №1:

Вы можете попробовать следующее:

 starttime = new Date();

setInterval(function(){
    getTimeElapsed(starttime);
}, 1000);
  

Теперь вы получаете доступ к глобальной объявленной переменной starttime . В то время как в вашем коде вы обращались к неопределенной переменной. Почему? У вашей функции был один аргумент, который вы никогда не передавали ей. Таким образом, ее значение не определено.

Ответ №2:

У вас есть две вызываемые переменные starttime .

Один глобальный, неявно объявленный здесь:

 starttime = new Date();
  

и одна локальная, объявленная здесь:

 function(starttime){
  

Поскольку вы не используете локальную версию, лучший подход — удалить это объявление.

 setInterval(function(){
  

В качестве альтернативы, обратитесь к глобальному явно:

 getTimeElapsed(window.starttime);