Неожиданный идентификатор в JavaScript, но я объявил переменную

Я просмотрел этот файл в течение часа и попробовал кучу перестановок.

$(document).ready(function() {

var unreadMessages = document.getElementsByClassName("unreadMessage");

var previousEntries;

chrome.storage.sync.get(null, {
    var previousEntries;
    previousEntries = (data["item"]);
});

console.log(previousEntries);


});


Почему previousEntries выдает "Uncaught SyntaxError: неожиданный идентификатор"?

Это, кажется, самая простая задача. Это} () или проблема?

1 ответ

Решение
$(document).ready(function() {

  var unreadMessages = document.getElementsByClassName("unreadMessage");

  var previousEntries;

  //                            vvvvvvvvvvvvvv
  chrome.storage.sync.get(null, function(data){
    // var previousEntries;              And if you want to access this variable outside,
    previousEntries = data["item"];   // don't redefine it here (no "var" keyword).
    logValue();                       // Now that the variable is set, you can use it
  });

  // console.log(previousEntries);    // Undefined, because it is not set yet.

  function logValue(){
    console.log(previousEntries);     // Now it should work (called from get's callback).
  }

});

Причина, по которой переменная еще не установлена, заключается в том, что chrome.storage.sync.get есть, как Ajax или setTimeout асинхронный. Представьте себе, что делаете это:

var myVar;

setTimeout(function(){
   myVar = 'Hello world!';
   console.log(myVar);     // logs "Hello world!" to the console
}, 100);

alert(myVar);              // alerts undefined

Другие вопросы по тегам