为什么变量未定义?

时间:2020-06-07 21:37:26

标签: javascript

我是JavaScript的初学者,想知道为什么即使没有提供“ message”的定义供使用的功能,以下代码片段也会提示“ Successful”。

var message;

function alertMessage() {
   alert(message);
}

message = "Successful";

alertMessage();

下面的代码返回未定义的,所以我假设该函数与它有关?

var message;

alert(message);

message = "Successful";

5 个答案:

答案 0 :(得分:4)

让我们逐行看一下这段代码的作用。

var message; // 1

function alertMessage() { // 2
   alert(message);
}

message = "Successful"; // 3

alertMessage(); // 4

1:声明一个名为message的变量。

2:声明一个使用变量的名为alertMessage的函数。请注意,此功能目前尚未执行。只是声明

3:将变量message的值设置为"Successful"

4:调用函数。现在执行该功能。请注意,变量message在上一步中已设置为"Successful",因此在函数执行时,它具有该值-这就是为什么看到它了。

现在,让我们来看第二个代码段。

var message; // 1

alert(message); // 2

message = "Successful"; // 3

这是怎么回事:

1:声明一个名为message的变量。尚未将其设置为一个值,因此目前为undefined

2:使用变量alert调用message函数。这将显示undefined,因为此时messageundefined

3:将变量message设置为值"Successful"。这对第2步中对alert的调用没有帮助-在您到达此处时,已经完成了操作。

要记住的重要:程序是命令的列表,从上至下执行。如果您想知道程序的功能,请从顶部开始逐行阅读。发生的事情接连发生。并非一次全部,而且顺序也不一样。

函数在声明时不执行。在调用时执行。

答案 1 :(得分:3)

在第一种情况下,步骤如下:

  1. 消息已声明但未定义。
  2. 函数已声明但未执行。
  3. 为变量消息分配了值
  4. 当消息有价值时执行功能

第二种情况

  1. 消息已声明但未定义
  2. 功能(警报)已执行,您看到未定义
  3. 然后向您分配值的消息

答案 2 :(得分:2)

如果您考虑一下,该功能就是一个蓝图。 直到您“调用”它才使用。

在第一个示例中。首先定义消息,然后“调用”该函数,该函数的作用与预期的相同。

在第二个示例消息中没有值->它为空,这就是为什么它是“未定义”的原因。 如果您将其设置为例如message =“ bla bla bla”,则它不会是不确定的。

这种解释可以吗?

答案 3 :(得分:1)

在第二个示例中,您在设置成功之前对消息调用警报。

执行顺序

声明消息并将其设置为未定义

显示未定义消息的呼叫警报

设置消息=成功

第一个例子

声明消息并将其设置为未定义

声明一个在执行时调用警报消息的函数

请注意,这在被调用之前不会执行任何操作

将消息设置为成功

调用上面的函数

答案 4 :(得分:1)

您可以通过设置message =“ error”来绕过它