我有一个简单的程序,我第一次在浏览器中运行。我在第6行。当我试图找出 a , b 的值时,浏览器会以值' undefined' 进行响应。但是当我试图找出 c 的值时,当然不存在它会给我一个错误。
我的问题是我在第6行进行调试时 - b&的状态c 必须相同 - 两者都未定义'或者两者都给出了错误',因为对于第6行的程序,存在 - 但 都是 - b& c 是这个程序状态下的重影,那么它如何将b作为未定义而c作为错误(粗略是正确的)。但是,程序什么时候发现我使用的是哪些变量,哪些不是,当我还在中间时,在程序的前半部分,第一次运行它。
答案 0 :(得分:1)
JavaScripts hoists 变量声明。这意味着即使在代码执行之前,JavaScript也会在当前环境中为源中的每个变量声明创建绑定,并使用undefined
初始化它们。
您可以将评估顺序视为:
var a;
var b;
> a = ...;
b = ...;
你在第三行打破。
当前环境中没有绑定c
,这就是抛出ReferenceError的原因。
答案 1 :(得分:1)
这是因为吊装。
当你的变量a和b在脚本中声明时,js编译器会在执行时将它们移动到脚本的顶部。
你的代码
var a=['apple','mango'];
var b=[{color:'red'}];
执行编译器时将声明移到脚本顶部。
var a;
var b;
a=['apple','mango'];
b=[{color:'red'}];
因此,当您访问a
或b
时,您会看到undefined
作为其值。但仍未声明c
。因此您将获得异常