在以下代码中,有两个“undefined”实例:
A:
b();
console.log(a);
var a = "Hello World!";
function b() {
console.log("Called b!");
}
这会导致控制台为“a”显示“Undefined”。
B:
b();
console.log(a);
function b() {
console.log("Called b!");
}
这会创建“未捕获的ReferenceError:a未定义”。在这两种情况下,a都是未定义的,控制台会告诉您。但是,为什么它会根据具体情况选择不同的方式呢?除了undefined和null之外还有几种形式的“undefined”吗?
答案 0 :(得分:8)
由于hoisting,第一个代码被视为如下。
var a; // Declare the variable
// Move function definitions to the top
function b() {
console.log("Called b!");
}
b();
console.log(a); // Undefined, no value assigned yet
a = "Hello World!";
console.log(a); // Hello World!
在第二个代码a
中永远不会定义。并且尝试访问这些变量将导致抛出ReferenceError。
这里有一个blog来阅读有关吊装的更多信息。
简单的规则是:
undefined
答案 1 :(得分:4)
关于hoisting。
基本上你的A块被Javascript解释为:
// Variable is declared, but without a value (undefined)
var a;
b();
console.log(a);
a = "Hello World!";
function b() {
console.log("Called b!");
}
这就是你在第二种情况下得到错误的原因:变量a没有在任何地方定义。