javascript - 为什么这个JS代码打印undefined?

标签 javascript

我不明白为什么 foo 的值在以下代码中未定义:

var foo = 1;

function bar() {
    if (false) {
        var foo = 10;
    }
    alert("Foo is " + foo);
}

bar();

结果:Foo 是未定义https://jsfiddle.net/yk7ae9b0/

而这些变体的行为符合预期。

var foo = 1;

function bar() {
    if (true) {
        var foo = 10;
    }
    alert("Foo is " + foo);
}

bar();

结果:Foo 是 10

var foo = 1;

function bar() {
    if (false) {
       // var foo = 10;
    }
    alert("Foo is " + foo);
}

bar();

结果:Foo 为 1

任何帮助将不胜感激。

最佳答案

您的 var foo 未在您认为的位置定义。 JavaScript 中变量的作用域是使用它们的函数,而不是声明它们的 block 。因此,您拥有的代码:

function bar() {
  if (false) {
    var foo = 10;
  }
  alert(foo);
}

被 JS 引擎解释为 实际上 就好像它是这样写的:

function bar() {
  var foo;
  if (false) {
    foo = 10;
  }
  alert(foo); // foo was never assigned a value!
}

因此,当警报触发时,您有一个 undefined variable foo,它隐藏了您在函数外声明的全局 foo

(这也会影响诸如 for(var i=...) ... 之类的事情——var i 是函数范围的,并且将是一个已声明的变量函数内的任何地方,而不仅仅是在你的 for 循环内)

关于javascript - 为什么这个JS代码打印undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29438078/

相关文章:

javascript - 在 Node.js Express 服务器 : res. render(file.ejs, data) 中处理 GET 请求由于未定义数据而无法工作

javascript - DataTables 导出到 Excel 下载 zip 文件

javascript - QuickSand,动画卡顿

javascript - 使用 Jquery 将所选元素更改回主要基础

javascript - AngularJS 错误 : Cannot use 'in' operator to search for '$ctrl' in

javascript - 有没有办法用 twitter bootstrap 3 carousel 关闭自动幻灯片?

javascript - HTML5 向 LI 添加占位符属性

javascript - 预检响应具有无效的 HTTP 状态代码 404 - ajax 请求浏览器

javascript - 将动态多个表单字段解析为 float

javascript - 日期时间本地 24 小时格式