Javascript Java脚本中未定义的变量 函数getForm() { var arry=[[0,1],[1,2],[2,3],[3,4]; var a; var x=1; 控制台日志(x); 对于(i=0;i

Javascript Java脚本中未定义的变量 函数getForm() { var arry=[[0,1],[1,2],[2,3],[3,4]; var a; var x=1; 控制台日志(x); 对于(i=0;i,javascript,Javascript,我对JavaScript完全陌生,我在Firebug中运行这个编程。我得到了未定义的输出,我希望输出x=1,a=2(我指的是第一个console.log和第二个console.log)。我只在函数中定义了所有变量。您在每次迭代中都记录a,但是a直到if语句为true时才被设置,这只发生在第二次迭代中 让我们一步一步地看一遍: function getForm() { var arry =[ [0,1] ,[1,2],[2,3],[3,4]]; var a;

我对JavaScript完全陌生,我在Firebug中运行这个编程。我得到了未定义的输出,我希望输出x=1,a=2(我指的是第一个console.log和第二个console.log)。我只在函数中定义了所有变量。

您在每次迭代中都记录
a
,但是
a
直到
if
语句为
true
时才被设置,这只发生在第二次迭代中

让我们一步一步地看一遍:

function getForm()  
{   
  var arry =[ [0,1] ,[1,2],[2,3],[3,4]];         
  var a;     
  var x = 1 ;        
  console.log(x);     
  for (i = 0; i < arry.length; ++i)      
  {         
    if (arry[i][0] == x)          
    {             
      a = arry[i][1];          
    }         
    console.log(a);  
  } 
}

它输出未定义的
a
,因为您第一次调用
console.log(a)
变量
a
未定义

您声明了一个不带值的
a

// 1. iteration
i = 0
arry[i][0] == x => false // 0 == 1
console.log(a) // undefined

// 2. iteration
i = 1
arry[i][0] == x => true // 1 == 1
a = arry[i][1] // a = 2
console.log(a) // 2

// 3. iteration and beyond
// the condition is always false, so `a` keeps its value
i = 2
arry[i][0] == x => false // 2 == 1
console.log(a) // 2
然后在循环的第一次迭代中检查:

var a;
i
0
时,
arry[i][0]
也为
0
。您将
x
定义为
1
。0不等于1,因此此条件为false。这意味着将值设置为
a
的条件块内的代码不会执行。但是,在它完成之后,代码将被删除


当时
a
未定义,因此
console.log(a)
logs
未定义
您的错误是
console
条件之外打印,如果
条件,那么第一次条件变为
false
(返回
未定义
),第二次条件满足(然后正确打印)

您应该将
控制台
移动到
if
状态

if (arry[i][0] == x)
控制台上的视图。日志(x)工作正常

在第一次迭代中,if条件为false,因此“a”不会被初始化,因此在控制台中您将得到未定义,下一次迭代之后,您将获得所需的控制台输出


如果您在firebug上运行,则会显示额外的“未定义”,因为调用不返回任何内容的函数将在控制台上导致“未定义”

您声明了该函数,但从未调用过该函数。调用函数将获得所需的结果,因为当我尝试在没有函数包装的情况下执行语句时,即

 1
 2
var arry=[[0,1]、[1,2]、[2,3]、[3,4];
var a;
var x=1;
console.log('x',x的值);
对于(i=0;i
这就是输出:

x 1的值

0迭代中a的值2864415817892.274

迭代2中1的a值

迭代2中a的值


在3次迭代2中a的值

在哪一行得到错误?您只定义了一个函数,从未调用过它。因此,firebug在声明函数后说,
未定义
我在第3行中出现错误,它将for循环中的数组作为普通文本,而不是蓝色是的,工作正常!!如果我在函数外部声明数组,我将无法访问它!!但为什么x最初没有打印?我的意思是这个变量x=1@因为我们最初打印x,但OP有一些不打印的目的。
 1
 2
    var arry =[ [0,1] ,[1,2],[2,3],[3,4]];
    var a;     
    var x = 1 ;        
    console.log('Value of x', x);     
    for (i = 0; i < arry.length; ++i) {         
       if (arry[i][0] == x) {             
          a = arry[i][1];          
       }         
       console.log('Value of a in ', i , 'iteration' ,a);  
    } ;