我是JavaScript的初学者,想知道为什么即使没有提供“ message”的定义供使用的功能,以下代码片段也会提示“ Successful”。
var message;
function alertMessage() {
alert(message);
}
message = "Successful";
alertMessage();
下面的代码返回未定义的,所以我假设该函数与它有关?
var message;
alert(message);
message = "Successful";
答案 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
,因为此时message
是undefined
。
3:将变量message
设置为值"Successful"
。这对第2步中对alert
的调用没有帮助-在您到达此处时,已经完成了操作。
要记住的重要:程序是命令的列表,从上至下执行。如果您想知道程序的功能,请从顶部开始逐行阅读。发生的事情接连发生。并非一次全部,而且顺序也不一样。
函数在声明时不执行。在调用时执行。
答案 1 :(得分:3)
在第一种情况下,步骤如下:
第二种情况
答案 2 :(得分:2)
如果您考虑一下,该功能就是一个蓝图。 直到您“调用”它才使用。
在第一个示例中。首先定义消息,然后“调用”该函数,该函数的作用与预期的相同。
在第二个示例消息中没有值->它为空,这就是为什么它是“未定义”的原因。 如果您将其设置为例如message =“ bla bla bla”,则它不会是不确定的。
这种解释可以吗?
答案 3 :(得分:1)
在第二个示例中,您在设置成功之前对消息调用警报。
执行顺序
声明消息并将其设置为未定义
显示未定义消息的呼叫警报
设置消息=成功
第一个例子
声明消息并将其设置为未定义
声明一个在执行时调用警报消息的函数
请注意,这在被调用之前不会执行任何操作
将消息设置为成功
调用上面的函数
答案 4 :(得分:1)
您可以通过设置message =“ error”来绕过它