为什么变量没有未定义?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么变量没有未定义?相关的知识,希望对你有一定的参考价值。

我是javascript的初学者,我想知道为什么下面的代码片段提示 "成功",即使没有提供 "消息 "的定义供函数使用。

var message;

function alertMessage() {
   alert(message);
}

message = "Successful";

alertMessage();

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

var message;

alert(message);

message = "Successful";
答案

让我们逐行看看这段代码是怎么做的。

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". 这无助于呼吁 alert 在第2步--到这里的时候已经完成了。

重要的是要记住: 程序是一个命令列表,从上到下执行。如果你想知道一个程序是做什么的,就从最上面开始,一行一行地读。行中的内容是一个接一个地发生的。不是同时发生的,也不是按不同的顺序发生的。

一个函数不是在它被声明的时候被执行的。它在被调用时才被执行。

另一答案

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

  1. 消息被声明但未定义
  2. 函数被声明但没有被执行。
  3. 给变量 message 分配了一个值
  4. 当信息的值为

在第二种情况下

  1. 信息已声明但未定义
  2. 函数(警报)被执行,你会看到未定义的
  3. 然后给信息赋值
另一答案

如果你仔细想想,函数就是一个蓝图,在你 "调用 "它之前,它不会被使用。

在第一个例子中,你先定义了消息,然后你 "调用 "了这个函数,它的工作原理就像预期一样。你首先定义了消息,然后你 "调用 "了这个函数,它的工作就像预期的那样。

在第二个例子中,message没有值->它是空的,这就是为什么它是 "undefined".如果你把它设置为例如message="bla bla bla",它就不会是undefined。

这个解释可以吗?

另一答案

在第二个例子中,你在消息被设置为成功之前就调用了 alert。

执行顺序

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

显示未定义的信息的呼叫提醒

设置信息=成功

第一个例子

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

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

请注意,在调用

将信息设置为成功

调用上述函数

另一答案

你可以通过设置 message = "error" 来绕过它。

以上是关于为什么变量没有未定义?的主要内容,如果未能解决你的问题,请参考以下文章

未调用自定义适配器 getView() 方法

getSupportFragmentManager() 在活动扩展片段中未定义

为啥axios数据存储在变量中时未定义?

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

片段着色器中未使用纹理数据 - OpenGL

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”