Javascript中的变量是大小写敏感的。bash
一个 JavaScript 标识符必须以字母、下划线(_)或者美圆符号($)开头;后续的字符也能够是数字(0-9)。 由于 JavaScript 语言是区分大小写的,因此字母能够是从“A”到“Z”的大写字母和从“a”到“z”的小写字母。函数
// 直接代码说明
// 取值
var a;
console.log(a); // undefined
console.log(b); // undefined,存在变量提高
var b;
console.log(c); // 未捕获的引用错误: c 未被定义
let x;
console.log(x); // undefined
console.log(y); // 未捕获的引用错误: c 未被定义, let声明的变量不会被提高
let y;
// 隐式转换
// undefined和null在布尔类型环境中都会转换为false
var isLogin;
if (isLogin) {
// do something...
}
// 在数值环境中,undefined被转为NaN,null被转为0
var num;
console.log(num - 0); // NaN
var num2 = null;
console.log(num2 - 0); // 0
复制代码
在函数以外声明的变量,叫作全局变量,由于它可被当前文档中的任何其余代码所访问。在函数内部声明的变量,叫作局部变量,由于它只能在当前函数的内部访问。ui
ECMAScript 6 以前的 JavaScript 没有 语句块 做用域spa
if (true) {
var x = 5;
}
console.log(x); // 5
if (true) {
let x = 5;
}
console.log(x); // ReferenceError: y 没有被声明
复制代码
JavaScript中能够先使用变量稍后再声明变量而不会引起异常。这一律念称为变量提高。code
JavaScript 变量感受上是被“提高”或移到了函数或语句的最前面。可是,提高后的变量将返回 undefined 值。所以在使用或引用某个变量以后进行声明和初始化操做,这个被提高的变量仍将返回 undefined 值。ip
console.log(x === undefined); // true
var x = 3;
复制代码
因为存在变量提高,一个函数中全部的var语句应尽量地放在接近函数顶部的地方。作用域
在 ECMAScript 6 中,let(const)将不会提高变量到代码块的顶部。所以,在变量声明以前引用这个变量,将抛出引用错误(ReferenceError)。文档
对于函数来讲,只有函数声明会被提高到顶部,而函数表达式不会被提高。string
/* 函数声明 */
foo(); // "bar"
function foo() {
console.log("bar");
}
/* 函数表达式 */
baz(); // 类型错误:baz 不是一个函数
var baz = function() {
console.log("bar2");
};
复制代码