未定义的变量?

时间:2018-07-21 12:24:17

标签: javascript variables undefined

由于某种原因,当我尝试运行此代码时,它显示为

  

错误taxableIncome未定义

和/或

  

y未定义

let taxableIncome = 80000;
if(taxableIncome >37000 && taxableIncome <80001);{
    const y = taxableIncome - 37000;
}
console.log(y);
console.log(taxableIncome);

我似乎无法弄清楚。任何帮助,将不胜感激!谢谢! (很抱歉,如果这是一个愚蠢的问题,我昨天学习了基本的JavaScript:/) Code

6 个答案:

答案 0 :(得分:1)

var的作用范围是该功能。

let const 的作用域为该块

这意味着y的范围为if。如果您使用过var,就不会发生这种情况。

您可能希望使用let而不是const -然后可以在if之外声明变量,但要在内部赋值if

可悲的是,您不能将其保留为const,因为稍后您要更改其值(仅两行,但这没关系)。

这里是这样的:

let taxableIncome = 80000;
let y;
if(taxableIncome >37000 && taxableIncome <80001) {
    y = taxableIncome - 37000;
}
console.log(y);
console.log(taxableIncome);

在上面的代码中,我还在if之后但在{打开之前删除了分号。


我可能会注意到这一点:如果您甚至不知道是否已设置变量,尝试获取变量的值可能并不明智。一切都取决于taxableIncome,因此 I 将添加任何依赖变量y且其值也位于if内的代码- -那也可以解决您的问题!

答案 1 :(得分:0)

您只是在if函数中使用了const,所以如果if完成,它将不会在主作用域上声明,请尝试避免这种情况。

在if语句之外声明const

var x;
if(1==1){
    x = 4;
}
console.log(x);

答案 2 :(得分:0)

问题在于范围。 const具有块作用域,这意味着它只能在定义它的块内部访问。在您的代码段中,y是在if块中定义的。因此,您必须在块外声明y

let taxableIncome = 80000;
let y;
if(taxableIncome >37000 && taxableIncome <80001);{
 y = taxableIncome - 37000;
}
console.log(y);
console.log(taxableIncome);

现在可以访问y。请查看this link,以获取有关Javascript范围的更多信息。

答案 3 :(得分:0)

按照您当前的代码状态,y将是未定义的代码。 这是因为您是在if中声明它,并试图在{if}范围之外(尚未声明)的console.log中声明它。 This thread gives a good read on scopes in JS,建议您看看。

我不知道在什么情况下无法定义taxableIncome,但是有两种方法可以解决y未被定义的问题:

如果仅在if中使用它,则可以在其中声明它,这是绝对可以的,但是您的console.log和您在其中所做的所有操作也必须移至if中。所以它应该像这样:

let taxableIncome = 80000;
if(taxableIncome >37000 && taxableIncome <80001) {
    const y = taxableIncome - 37000;
    console.log(y)
    // anything else you do with the y must be in here
}
console.log(taxableIncome);

更灵活的解决方案和您可能想要的解决方案是,在y之前简单地声明if。当然,由于稍后要为其设置值,因此它必须是let而不是const

let taxableIncome = 80000;
let y;
if(taxableIncome >37000 && taxableIncome <80001) {
    y = taxableIncome - 37000;
}
console.log(y);
console.log(taxableIncome);

此外,在另一条注释中,if语句后不需要分号。

答案 4 :(得分:0)

您的代码中有一些错误需要解决:

  1. 您已在y块中定义了if。因此此变量将仅在此块内部可用,而在此块外部,您将得到undefined错误,因为在该范围内未定义y
  2. 您已将;放在if条件检查部分(第2行)的末尾。这自然不是一个错误,但似乎是一个坏习惯

因此,您需要按以下方式重写代码:

let taxableIncome = 80000;
let y = 0;
if(taxableIncome >37000 && taxableIncome <80001){
    y = taxableIncome - 37000;
}
console.log(y);
console.log(taxableIncome);

正如您提到的您是JavaScript的新手和新手一样,我认为您还需要阅读更多关于letvar之间的区别的信息,以便您可以明智地使用它们。

答案 5 :(得分:0)

您收到错误消息是因为 y 不在 if 条件块的范围内。正确的代码应如下所示:

        let taxableIncome = 80000;
        if (taxableIncome > 37000 && taxableIncome < 80001); {
            const y = taxableIncome - 37000;
            console.log(y);
        }
        console.log(taxableIncome);

您是否具有不希望更改或永远不会更改的值?就像Pi(3.14)的值一样,可以在JavaScript中将它们分配给const。 const的值不能通过重新分配来更改,如果尝试这样做,则会抛出错误。