JavaScript 变量作用域返回 "undefined"

标签 javascript variables scope

<分区>

JavaScript 指南中有一句话是关于变量作用域的:“JavaScript 中的变量在某种意义上被“提升”或提升到函数或语句的顶部。但是,尚未初始化的变量将返回值不明确的。”

   /**
    * Example 2
    */
   // will return a value of undefined
   var myvar = "my value";

(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

我的问题是:为什么“console.log(myvar);”会返回 undefined?我认为第一行已将 myvar 初始化为“我的值”的值。

最佳答案

因为所有变量声明都自动提升到它们定义函数 block 的顶部,所以这段代码:

(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

实际上是这样给 JS 解释器的:

(function() {
  var myvar;   // declares a new local variable that covers up the global name
  console.log(myvar); // undefined
  myvar = "local value";
})();

这应该向您展示为什么本地定义的 myvarconsole.log() 输出的内容,并且它已被定义,但尚未初始化,因此显示为 未定义

本地定义的 myvar 覆盖/覆盖了全局定义的,因此当您在函数中访问 myvar 时,您只会获得本地定义的变量(无论是否已初始化)还没有)。

查看关于同一主题的其他引用资料:

How do JavaScript variables work?

JavaScript variable undefined vs not defined

One var per function in JavaScript?

JavaScript 'hoisting'


如果您在函数中删除 var(这样您只是引用一个变量,而不是声明一个新变量),那么您将只有一个名为 myvar 你会得到你可能期望的行为:

var myvar = "my value";

(function() {
  console.log(myvar); // outputs "my value"
  myvar = "local value";
})();

关于JavaScript 变量作用域返回 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26291183/

相关文章:

javascript - 使用 PHP MySQL 将选项标记值重置为数据库中的 1

php - 在 PHPDoc 中声明局部变量的属性

python - 如何在 Flask 中动态添加项目到 jinja 变量?

javascript - 如何在 JavaScript 中连接变量和字符串?

函数内部的c++引用函数

php - 倒计时器从客户端机器获取时间,需要服务器时间

php - HTML与PHP的replaceWith函数

javascript - 通过循环选择复选框?

c - C 中的作用域和链表

JavaScript 异步回调和作用域