我正在尝试在for循环中创建7个Javascript共享工作程序。
我的IDE(Pycharm)正在警告这两个变量container-frame
和worker
:
“可从闭包中访问可变变量”
这些共享工作者中的每一个都在与network_worker.js进行通信
以下是我的JS代码:
socket = io.connect('http://' + document.domain + ':4999/layout');
// Set up CSS
for (var i=0; i<player_dict.length; i++) {
var _id = player_dict[i]['_id'];
var container_frame = document.getElementById("container-frame-" + _id);
container_frame.style.display = "none";
setup_communication();
console.log(_id)
var client_id = _id;
var alarm_flag= "";
var alarm_metric="";
if (client_id != null && client_id == 0 && parseInt(location.port) == 4999) { // player_0_hack (for now). Remove and have work properly.
label = "";
} else if (client_id != null){
label = "Service " + (parseInt(location.port) - 5000 + 1);
} else {
label = "Invalid player id";
}
var worker = new SharedWorker('../static/js/network_worker.js', client_id);
console.log(worker);
worker.port.addEventListener('message', worker_callback, false);
window.addEventListener("beforeunload", function () {
worker.port.postMessage('label_close');
});
worker.port.start();
function worker_callback(e) {
console.log(e.data)
if(e.data.type == "update_label") {
console.log(container_frame)
container_frame.style.animationDuration = Math.random() + "s";
}
}
worker.port.postMessage({type: "label_connection", payload: {domain: document.domain, port: location.port, client_id: client_id, label: label}, alarm_flag: alarm_flag, alarm_rate: 1, alarm_metric: alarm_metric});
}
最终我要做的是为7个HTML元素设置容器框架的动画。我正在使用for循环迭代这些元素。当从JS脚本(更新标签)触发事件时,会发生这些动画。
目前,我有7个HTML元素。最后一个元素只是使动画正常工作。
我怀疑当我将worker_callback函数放在for循环中时,JS编译器对container_frame
的范围感到困惑,但我不确定。
有什么建议吗?
答案 0 :(得分:0)
问题是两个变量var a=[[1,1],[2,2],[3,3],[4,4]]
和[2,2]
,其中定义为var not const。感谢@Edmund Lee