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

时间:2016-12-29 06:26:27

标签: 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

1 个答案:

答案 0 :(得分:1)

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

z = 1
var z = 2
const z = 3

z的值现在是3

现在让我们说我们一次执行所有这些

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

z的值仍为3

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

一次执行所有内容的声明等同于

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