2013-04-30 18 views
23

Tôi đã cố gắng sử dụng importScripts để tải một tệp JavaScript thứ hai vào công nhân web của tôi, nhưng mặc dù không có lỗi xảy ra nhưng nó không hoạt động. Tôi thu hẹp vấn đề xuống để tình trạng này rất đơn giản:importScripts (web workers)

Trong tập tin HTML chính:

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

Trong script1.js:

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

Trong script2.js:

a = 6 

Tôi muốn thấy một hộp thoại hiển thị 6, bởi vì đã được thay đổi từ 5 đến 6 bằng cách nhập tập lệnh script2.js, nhưng hộp thoại hiển thị 5. Tôi đang thiếu gì ở đây?

+0

Could dòng sau importScripts ("script2" .js "); -> self.postMessage (a), không còn đề cập đến bản thân vì bạn đã nhập khẩu? –

Trả lời

27

Sử dụng var a trong hàm có nghĩa là a sẽ luôn là riêng tư. Kể từ importScripts adds to the global scope, JS muốn truy cập vào địa chỉ a được bản địa hóa nhiều hơn ở chức năng gửi a. Bạn có thể đăng self.a thay vì 6, như bạn mong đợi.

EDIT: Có người thời gian gần đây đã hỏi tôi về vấn đề này trong người, vì vậy tôi làm một bản demo để làm rõ các hành vi: http://pagedemos.com/importscript/