javascript - not - importScripts(trabajadores web)
web workers (1)
He intentado usar importScripts para cargar un segundo archivo JavaScript en mi trabajador web, pero aunque no se produjo ningún error, no funcionó. Reduje el problema a esta muy simple situación:
En el archivo HTML principal:
<script>
var w = new Worker("script1.js");
w.addEventListener("message", function(e){
alert(e.data);
})
w.postMessage();
</script>
En script1.js:
self.addEventListener("message", function(e){
var a = 5;
importScripts("script2.js");
self.postMessage(a);
})
En script2.js:
a = 6
Me gustaría ver un cuadro de diálogo que muestre 6, porque a se cambió de 5 a 6 al importar script2.js, pero el cuadro de diálogo muestra 5. ¿Qué me estoy perdiendo aquí?
Usar var a
en la función significa que a
siempre será privado. Dado que importScripts se agrega al alcance global , JS prefiere acceder a una más localizada en la función que publica a
. Puede publicar self.a
en self.a
lugar, que será 6, como esperaba.
EDITAR: alguien me preguntó recientemente sobre esto en persona, así que hice una demostración para aclarar el comportamiento: http://pagedemos.com/importscript/