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");
};
複製代碼