Javascript sharedworker里面的循环

时间:2017-03-02 17:15:48

标签: javascript

我正在尝试在for循环中创建7个Javascript共享工作程序。 我的IDE(Pycharm)正在警告这两个变量container-frameworker

  

“可从闭包中访问可变变量”

这些共享工作者中的每一个都在与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的范围感到困惑,但我不确定。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

问题是两个变量var a=[[1,1],[2,2],[3,3],[4,4]][2,2],其中定义为var not const。感谢@Edmund Lee