Неожиданный идентификатор в 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