var a;
console.log("The value of a is " + a); // The value of a is undefined console.log("The value of b is " + b); // The value of b is undefined
var b = 3; console.log("The value of c is " + c); // Uncaught ReferenceError: c is not defined let x;
console.log("The value of x is " + x); // The value of x is undefined console.log("The value of y is " + y); //Uncaught ReferenceError
let y;
变量提升,使用var 时,例子中的b 会被提升,但值仍未undefined 。 使用let 可以避免提示,打印 y 时将报错。
/**
* Example 1
*/
console.log(x === undefined); // true
var x = 3; /**
* Example 2
*/
// will return a value of undefined
var myvar = "my value"; (function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
注意上面的自调用函数中,myvar 是指local 域中,它覆盖了global域中的myvar =“my value"; 所以myvar 被提示,值为undefined。
/* Function declaration */ foo(); // "bar" function foo() {
console.log("bar");
} /* Function expression */ baz(); // TypeError: baz is not a function var baz = function() {
console.log("bar2");
};
函数声明将会被提升,而函数表达式将不会提升,所以baz()将报错