Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组的奇怪行为。全局声明无法保存值_Javascript_Arrays - Fatal编程技术网

Javascript数组的奇怪行为。全局声明无法保存值

Javascript数组的奇怪行为。全局声明无法保存值,javascript,arrays,Javascript,Arrays,我的一个函数中有以下代码。我有一个数组'arr',它在if{}中使用时工作正常。但是现在在外面使用时它可以工作了。谁能告诉我我错过了什么 function runQueries() { var arr = new Array; db.transaction (function (transaction) { var sql = "SELECT * FROM incomecategory"; transaction.execut

我的一个函数中有以下代码。我有一个数组'arr',它在if{}中使用时工作正常。但是现在在外面使用时它可以工作了。谁能告诉我我错过了什么

 function runQueries()
 {
    var arr = new Array;

    db.transaction (function (transaction) 
      {
        var sql = "SELECT * FROM incomecategory";

        transaction.executeSql (sql, undefined, 
        function (transaction, result)
        {
          if (result.rows.length)
          {
            for (var i = 0; i < result.rows.length; i++) 
            {
              var row = result.rows.item (i);
              var categoryname = row.categoryname;
              arr[i] = categoryname;
            }
                              //alert(arr[0]); // It works


          }  
          else
          {

          }
        }, error);

      });
       //alert (arr[0]); // It doesn't work. 

 }
函数runquerys()
{
var-arr=新数组;
db.transaction(功能(事务)
{
var sql=“从incomecategory中选择*”;
transaction.executeSql(sql,未定义,
功能(事务、结果)
{
if(result.rows.length)
{
对于(var i=0;i
这是异步行为。代码底部的警报可能在数据库查询之前执行

这是异步行为。代码底部的警报可能在数据库查询之前执行

打开浏览器的错误控制台,查看是否出现javascript错误不确定此webSQL ish代码在哪个框架下运行,但它们通常是异步的。直到外部函数退出(因此,在
警报
调用之后),该事务函数才真正运行。这是因为当您发出警报(arr[0])时,您的数组仍然为空。如果您在内部发出
alert(“a”)
,在外部发出
alert(“b”)
,则在sql执行完毕后,它将首先向“b”发出警报,然后向“a”发出警报。打开浏览器的错误控制台,查看是否出现任何javascript错误不确定此webSQL ish代码在哪个框架下运行,但它们通常是异步的。直到外部函数退出(因此,在
警报
调用之后),该事务函数才真正运行。这是因为当您发出警报(arr[0])时,您的数组仍然为空。如果您在内部发出警报(“a”),在外部发出警报(“b”),则当您的sql完成执行时,它将首先向“b”发出警报,然后向“a”发出警报。/cf。您需要做的是调用一个回调函数,该函数在“if”中接收数组作为参数(并执行您需要它执行的任何操作)。谢谢。我理解这个问题。有没有办法延迟arr的使用,使其仅在数据库查询后使用?使用回拨功能是一种选择。但就我而言,这将是非常复杂的。这个arr应该包含类别。然后,我准备了另一个函数,它运行另一个查询来保存另一个数组中每个类别的总数。然后我有第三个计算百分比的函数。最后,第四个函数将使用这些数组系列中的值创建图形。/agreed。您需要做的是调用一个回调函数,该函数在“if”中接收数组作为参数(并执行您需要它执行的任何操作)。谢谢。我理解这个问题。有没有办法延迟arr的使用,使其仅在数据库查询后使用?使用回拨功能是一种选择。但就我而言,这将是非常复杂的。这个arr应该包含类别。然后,我准备了另一个函数,它运行另一个查询来保存另一个数组中每个类别的总数。然后我有第三个计算百分比的函数。最后,第四个函数将使用这些数组系列中的值创建图形。