将一个函数中的局部变量传递给另一个函数

时间:2014-04-17 17:55:24

标签: javascript arrays function variables

我遇到了这个问题。我有这个代码(字符串的形式为:'var1,var2,var3',someIdArray是一个包含一些id的数组):

function myFunction1(variable,string)
  {
  var myArray = string.split(',');
  for (i=0;i<myArray.length;i++)
    {
    for (j=0;j<someIdArray[j].length;j++)
      {
      document.getElementById(someIdArray[j]).onclick=function() { myFunction2(variable,myArray[i]) };
      }
    }
  }
function myFunction2(variable1,variable2)
  {
  alert(variable1);
  alert(variable2);
  }

现在当我在someIdArray中单击一个带有id的元素时,myFunction2会运行,并且当我将它放在myFunction1中时我得到variable1,但是variable2是未定义的。如何确保我为单击的元素定义的onclick具有固定变量?

3 个答案:

答案 0 :(得分:1)

试试这样:

function myFunction1(variable,string)
{
  var myArray = string.split(',');
  for (var i=0;i<myArray.length;i++)
  {
    for (var j=0;j<someIdArray.length;j++)
    {
      document.getElementById(someIdArray[j]).onclick=function()
      {
         var localI = i;
         myFunction2(variable,myArray[localI]);
      }
    }
  }
}
function myFunction2(variable1,variable2)
{
  alert(variable1);
  alert(variable2);
}

您的代码中的问题是ij是全局变量,因为您没有向其添加var关键字。

因此,您将一个增加到myArray.length的全局变量传递给函数。

如果您执行myArray[myArray.length],则会获得undefined

我在上面的代码中所做的是存储一个封装在onClick函数范围内的局部变量。

另一种方式是:

for (var i=0;i<myArray.length;i++)
{
    for (var j=0;j<someIdArray.length;j++)
    {
      var myArrayIElement = myArray[i];
      document.getElementById(someIdArray[j]).onclick=function()
      {

         myFunction2(variable,myArrayIElement);
      }
    }
}

在这里,您使用myArray[i]中的值创建一个变量,并将其传递给onClick函数,而不是将i传递给函数。

答案 1 :(得分:0)

问题是你内在的循环:

for (j=0;j<someIdArray[j].length;j++)

你可能想要someIdArray.length而不是j元素的长度

答案 2 :(得分:0)

此处更正的代码,这是范围问题,     你做了两件错事,      1.你得到的someIdArray长度是错误的      2.没有分配数组元素并传递给click事件

function myFunction1(variable, string) {
    var myArray = string.split(',');
    for (var i = 0; i < myArray.length; i++) {
        var arrEle = myArray[i];
        for (var j = 0; j < someIdArray.length; j++) {
            document.getElementById(someIdArray[j]).onclick = function() {
                myFunction2(variable, arrEle);
            };
        }
    }
}

function myFunction2(variable1, variable2) {
    alert(variable1);
    alert(variable2);
}