Подтвердить что ты не робот

ImportScripts (веб-работники)

Я попытался использовать importScripts для загрузки второго файла JavaScript в мой веб-рабочий, но, несмотря на отсутствие ошибки, он не сработал. Я сузил проблему до этой очень простой ситуации:

В основном файле HTML:

<script>
var w = new Worker("script1.js");
w.addEventListener("message", function(e){
    alert(e.data);
})
w.postMessage();
</script>

В файле script1.js:

self.addEventListener("message", function(e){
    var a = 5;
    importScripts("script2.js");
    self.postMessage(a);
})

В script2.js:

a = 6

Мне бы хотелось увидеть диалоговое окно с 6, потому что было изменено с 5 на 6, импортировав script2.js, но в диалоговом окне показано 5. Что мне здесь не хватает?

4b9b3361

Ответ 1

Использование var a в функции означает, что a всегда будет закрытым. Поскольку importScripts добавляет в глобальную область, JS предпочитает доступ к более локализованной a в функции, которая отправляет a. Вы можете отправить self.a вместо этого, что должно быть 6, как вы ожидали.

EDIT: кто-то недавно спросил меня об этом лично, поэтому я сделал демо, чтобы прояснить поведение: http://pagedemos.com/importscript/