JS在一个简单的程序中进行变量识别

时间:2016-03-10 06:28:59

标签: javascript debugging variables object

我有一个简单的程序,我第一次在浏览器中运行。我在第6行。当我试图找出 a b 的值时,浏览器会以值' undefined' 进行响应。但是当我试图找出 c 的值时,当然不存在它会给我一个错误。

我的问题是我在第6行进行调试时 - b&的状态c 必须相同 - 两者都未定义'或者两者都给出了错误',因为对于第6行的程序,存在 - 但 都是 - b& c 是这个程序状态下的重影,那么它如何将b作为未定义而c作为错误(粗略是正确的)。但是,程序什么时候发现我使用的是哪些变量,哪些不是,当我还在中间时,在程序的前半部分,第一次运行它。

enter image description here

2 个答案:

答案 0 :(得分:1)

JavaScripts hoists 变量声明。这意味着即使在代码执行之前,JavaScript也会在当前环境中为源中的每个变量声明创建绑定,并使用undefined初始化它们。

您可以将评估顺序视为:

  var a;
  var b;
> a = ...;
  b = ...;

你在第三行打破。

当前环境中没有绑定c,这就是抛出ReferenceError的原因。

另请参阅Javascript function scoping and hoistingmany others

答案 1 :(得分:1)

这是因为吊装。

当你的变量a和b在脚本中声明时,js编译器会在执行时将它们移动到脚本的顶部。

你的代码

var a=['apple','mango'];
var b=[{color:'red'}];

执行编译器时将声明移到脚本顶部。

var a;
var b;
a=['apple','mango'];
b=[{color:'red'}];

因此,当您访问ab时,您会看到undefined作为其值。但仍未声明c。因此您将获得异常