javascript - 使用参数调用回调

时间:2016-10-18 09:30:33

标签: javascript parameters callback

我试图运行一个在循环调用之间等待1秒的脚本。但代码不会识别i参数。

      for (var i = 0; i < lines.length; i++) {
          var scanProgressInterval = setInterval(function(i) {
          // Process the line, noting it might be incomplete.
            if (lines[i].indexOf("(y/n)") > -1) {
              console.log("includes  (y/n)");
              ws.emit('scan', JSON.stringify({scan: false, question: lines[i]}));
            }
            else if (lines[i].indexOf("any key") > -1) {
              console.log("any key");
              ws.emit('scan', JSON.stringify({scan: false, key: lines[i]}));
            }
          }, 1000);
      }

这段代码有什么问题?

3 个答案:

答案 0 :(得分:1)

这里'我'是全球声明的。

尝试将您的函数用作闭包。

      function scanProgressInterval(i){ 
          setInterval(function() {
              // Process the line, noting it might be incomplete.
                if (lines[i].indexOf("(y/n)") > -1) {
                  console.log("includes  (y/n)");
                  ws.emit('scan', JSON.stringify({scan: false, question: lines[i]}));
                }
                else if (lines[i].indexOf("any key") > -1) {
                  console.log("any key");
                  ws.emit('scan', JSON.stringify({scan: false, key: lines[i]}));
                }
              }, 1000);
      }

     for (var i = 0; i < lines.length; i++) {
          scanProgressInterval(i);
      }

答案 1 :(得分:0)

您必须在后面添加参数

  

的setInterval(函数,毫秒的param1,参数2,...)

查看here了解更多信息。

答案 2 :(得分:0)

您的i此处:setInterval(function(i) {...属于setInterval()函数的范围,这意味着它没有值,因为在setInterval()内调用回调函数时功能,它将无参数传递。

您无需将i作为回调参数放在setInterval()中。只需删除它,因为您已经可以在循环内访问i