javascript - 关于 var/const,为什么这段代码会起作用?

标签 javascript ecmascript-6

打开开发控制台(或在node.js中),按顺序输入以下代码:

a = 1
var a = 2
const a = 3

screenshot1

正如你所见,它可以工作,但是如果你一次输入所有代码,你会得到一个错误,我认为这样更合理screenshot2

我想唯一的区别是提升,如果你一次输入所有代码,它将被视为:

var a
a = 1
a = 2
const a = 3

但我不明白为什么当你逐行输入时它会起作用,而且如果你跳过第一行,你会得到预期的错误

enter image description here

最佳答案

在环境的全局范围内,无论类型如何,都可以分配和声明变量,因此当您按顺序输入以下代码时,它会起作用。

z = 1
var z = 2
const z = 3

现在 z 的值为 3

现在假设我们一次执行所有这些

    z = 4;  var z = 5;  const z = 6;

z 的值仍然是 3

在这种情况下,解释器将抛出错误,因为在这里它将尝试将上述所有语句作为一个 block 执行一次,现在它已经找到了 'z' 的多个声明,因此将抛出整个 block 的错误并且不会甚至执行第一部分,即 z = 4;

一次执行所有内容的语句等同于

(function foo(){ z = 4; var z = 5; const z = 6;  })();

关于javascript - 关于 var/const,为什么这段代码会起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41374278/

相关文章:

javascript - 在 javascript 中,从迭代器创建数组

javascript - 如何防止在 React 应用程序中拖放图像?

javascript - 向格式为 'h:i:s: A' 的字符串添加分钟和秒的最快方法

node.js - Node 0.12.x const 处于严格模式问题

javascript - react-native:组件不在 .map 中呈现

javascript - 对象数组的拼接函数

javascript - 匹配符号的正则表达式以符号开头

javascript - 如何根据 1 个主复选框(19 次)选中/取消选中 3 个辅助复选框?

javascript - 如何在 Laravel Blade 中使用 javascript 输出未转义的 HTML?

javascript - 使用字符串键映射嵌套 JavaScript 对象,然后过滤列表