变量定义,不同的输出

variable definition, different output

本文关键字:输出 定义 变量      更新时间:2023-09-26

这给出了正确的答案:

<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>

为什么?

正如其他人所提到的,sita在第二个例子中是未定义的。

在你的特定情况下,与未定义进行较大或较小的比较总是会产生错误,无论你与什么进行比较。

所以,你的表达转化为

if (false)

编辑:我完全错过了第二个例子的第5行,因为很多人写变量sita是未定义的,而实际上它的值是未定义。因此,启用严格模式在这里不会有多大好处。无论如何,仅供参考,我的原始帖子:

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

"use strict";

链接:什么是";使用严格的";在JavaScript中执行,其背后的原因是什么?

假设您是口译员。你已经到达了if(numbers[i]>sita){行,你会怎么想,sita变量的值是多少?

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

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

在您的第二个代码示例中,sita在使用前是不定义的-仅在if中定义。因此sita未定义,并且您的if条件不会检出将不打印任何内容