Javascript 如何将参数传递到内部函数

Javascript 如何将参数传递到内部函数,javascript,Javascript,我没有设法将I作为参数从onready传递到setInterval,因此同时我解析了循环: function myFunc() { myWidgets[0].onready = function(){ setInterval( function(){ var pVal = $('#Pv1').text(); myWidgets[0].setValue(pVal); }, 1000); }; myWidgets[1].onready = fun

我没有设法将I作为参数从onready传递到setInterval,因此同时我解析了循环:

function myFunc() {
  myWidgets[0].onready = function(){
    setInterval( function(){
      var pVal = $('#Pv1').text();
      myWidgets[0].setValue(pVal);
    }, 1000);
  };

  myWidgets[1].onready = function(){
    setInterval( function(){
      var pVal = $('#Pv2').text();
      myWidgets[1].setValue(pVal);
    }, 1000);
  };

  myWidgets[2].onready = function(){
    setInterval( function(){
      var pVal = $('#Pv3').text();
      myWidgets[2].setValue(pVal);
    }, 1000);
  };
如何添加I作为参数

以下操作不起作用,setInterval中的内部函数中未定义i:

  myWidgets[i].onready = function(i){
    setInterval( function(i){
      var j = i + 1;
      var pVal = $('#Pv' + j).text();
      myWidgets[i].setValue(pVal);
    }, 1000);
  };

你能做什么,但我不知道这是否是你问题的答案

for(var i = 0; i < 3; i++) {
myWidgets[i].onready = function(){
     setInterval( function(){
        var pVal = $('#Pv' + (i+1) ).text();
        myWidgets[i].setValue(pVal);
     }, 1000);
};
}

您可以使用enclosure使i的当前值可通过onready访问:


如果没有机柜,它无法使用i的当前值的原因是它不会在循环的当前步骤使用该值。相反,当onready发生时,它将使用i的值,当循环结束时,i的值已经达到最大值。

您可以简单地使用函数外壳

for (var i=0; i<3; i++) {
  (function(i) {
    myWidgets[i].onready = function() {
      setInterval(function(){
         var pVal = $('#Pv'+(i+1)).text();
         myWidgets[i].setValue(pVal);
      }, 1000);
    };
  })(i);
 }

您需要阅读您尝试使用的API的文档

我会告诉你:

语法


你是在循环中运行它,还是像你发布的那样?使$'Pv'+j.text;使用j.toString
for (var i=0;i<3;i++) {
    (function(x){
        myWidgets[x].onready = function(){
            setInterval(function(){
                var pVal = $('#Pv' + (x+1) ).text();
                myWidgets[x].setValue(pVal);
            }, 1000);
        }
    })(i);
}
for (var i=0; i<3; i++) {
  (function(i) {
    myWidgets[i].onready = function() {
      setInterval(function(){
         var pVal = $('#Pv'+(i+1)).text();
         myWidgets[i].setValue(pVal);
      }, 1000);
    };
  })(i);
 }
var intervalID = window.setInterval(func, delay[, param1, param2, ...]); var intervalID = window.setInterval(code, delay); for(var i = 0; i < 3; i++) { myWidgets[i].onready = function(){ setInterval( function(j){ var pVal = $('#Pv' + (j+1) ).text(); myWidgets[j].setValue(pVal); }, 1000, i); }; }
Try this. The case you are referring to is closure

myWidgets = [];
for(var i = 0; i < 3; i++) {
    myWidgets[i].onready = (function(i){
        return function(){setInterval( function(){
            var pVal = $('#Pv' + (i+1) ).text();
            myWidgets[i].setValue(pVal);
            console.log(i)
        }, 1000);}
    })(i);
}