2013-07-26 44 views
-1

这给了正确答案:变量定义,不同的输出

<script type="text/javascript"> 
var numbers=[67,56,45,34,78,54,67,90,43,56,78,90,23,45,67,89,54,1]; 
var sita=0; 
for(i=0;i<numbers.length;i++){ 
    if(numbers[i]>sita){ 
     var sita=numbers[i]; 
     document.write(sita+" "); 
     } 
    } 
</script> 

这不是工作:

<script type="text/javascript"> 
var numbers=[67,56,45,34,78,54,67,90,43,56,78,90,23,45,67,89,54,1]; 
for(i=0;i<numbers.length;i++){ 
    if(numbers[i]>sita){ 
     var sita=numbers[i]; 
     document.write(sita+" "); 
     } 
    } 
</script> 

为什么呢?

+7

SITA未定义:)这里:'编号[I]> sita' – karaxuna

+0

没错,'sita'未在第二个例子中所定义。 – Nadh

+0

sita未定义。所以'>'comapre运算符不起作用 – KarSho

回答

0

在您的第一个代码示例中sita定义在for之前,并在之内定义if语句。我会假设你的第二个定义var sita = numbers[i]应该看起来像sita = numbers[i]

在您的第二个代码示例中sita在使用前未定义 - 只在您的if中。所以sitaundefined和你的条件不会退房什么都不会打印

0

假设你是口译员。你已经到达if(numbers[i]>sita){这条线你认为什么值sita变量?

您必须在使用它们之前定义变量(如第一个示例中所示)。否则,口译员不会知道这个词是什么意思。

+0

这不完全正确。在第二个例子中,'sita'变量* *在脚本的最开始处有一个值undefined,甚至在'var sita = 0;'语句之前。请记住,在实际执行任何代码之前,函数或脚本中的所有变量都会存在。 (通常称为“吊装”。) –

2

其他人已经提到sita在第二个例子中是未定义的。

与未定义的比较或更大或更小的比较 - 在​​您的特定情况下 - 总是产生错误,无论与您比较的是什么。

所以,你的表情转变为

if (false) 

编辑: 我完全错过了第二个例子中的第5行,因为有很多人写道,可变SITA是不确定的时候,其实只是它的价值是不确定的。因此,启用严格模式在这里不会有太大的好处。不管怎么说,仅供参考,我原来的职位:

为了避免类似的错误,你应该总是(或者,如果不总是那么 至少在调试时)使用的严格模式(可用自 的ECMAScript 5)。

"use strict"; 

链路: What does "use strict" do in JavaScript, and what is the reasoning behind it?

+0

这不是正确的答案,因为在这种情况下,sita本身是未定义的,不是sita的值,所以它不等同于'if(false)',而是会抛出异常 – karaxuna

+0

在控制台中写入:'undeclaredvariable> 5 '。它会抛出异常。然后试试这个:var second;第二> 5;'它会记录错误。然后写'typeof undeclaredvariable'和'typeof second'都会是“undefined”。看到差异? :) – karaxuna

+0

我正在谈论OP的具体例子。尝试一下。将它复制到一个html页面。运行。告诉我哪里是错误抛出,并重新评估,如果我应得的downvote。 http://jsbin.com/uhawub/1/ – lightxx