變量
變量的聲明
在JavaScript中怪得,聲明變量的關(guān)鍵字為var
和 let
(ES6規(guī)范)
當只聲明變量時编曼,聲明為語句
語句沒有返回值或返回值纤泵,表達式有返回值铣口。
(一些說法把返回值為undefined
或void
的判定為語句黔寇,否則判定為表達式偶器。)
使用 var
關(guān)鍵字聲明變量
聲明格式 var 變量名
例如: var a
就聲明了一個變量 a
注意:var
關(guān)鍵字聲明的變量擁有全局定義域或函數(shù)作用域(聲明總是會被JavaScript引擎提前)
在ES6引入
let
前,JavaScript沒有塊作用域
你眼中的代碼:
a = 10;
a += 10;
a--;
{
var a;
}
JavaScript引擎眼中的代碼:
var a;
a = 10;
a += 10
a--
因此推薦的做法是在函數(shù)或全局代碼的前面部分使用 var
關(guān)鍵字聲明變量
你可以用 var
關(guān)鍵字重復聲明一個變量缝裤,例如屏轰,以下的代碼是合法的
var a;
var a;
var a;
新聲明的同名變量會覆蓋掉原來的變量
在代碼的任何位置,可以不使用var
關(guān)鍵字就能聲明變量
此時聲明的變量為文件的全局變量)
例如: a
就聲明了一個全局變量 a
注意:最好不要用這個特性憋飞,不然接坑的碼農(nóng)可能要打死你霎苗,因為這個特性存在很大的安全隱患
例如下面的代碼訪問變量 a
時打錯為 b
,解釋器就認為你又聲明了一個全局變量 b
a = 0;
console.log(b);
在未使用嚴格模式時榛做,控制臺得到的輸出為undefined
當使用了嚴格模式時("use strict"
)唁盏,這種聲明方式不會取悅解釋器
因此使用嚴格模式可以規(guī)避一些拼寫錯誤
使用 let
關(guān)鍵字聲明變量
聲明格式 let 變量名
例如: let a
就聲明了一個變量 a
注意:let
關(guān)鍵字聲明的變量擁有塊變量定義域(定義不會被JavaScript引擎提前)
因此,下面的代碼時不合法的
{
let b = 0;
}
b;
與 var
關(guān)鍵字不同检眯,使用 let
關(guān)鍵字的變量不能重復定義厘擂。例如,以下的代碼是不合法的
let a;
let a;
如果你可以使用ES6規(guī)范锰瘸,那么請擁抱
let
關(guān)鍵字刽严,拋棄var
關(guān)鍵字
不可以使用 let
和 var
關(guān)鍵字重復聲明一個變量
例如,下面的代碼是不合法的
let a;
var a;
var a;
let a;
變量的命名
變量的名字不是隨意取的避凝,想要取悅解釋器就必須遵守以下的規(guī)則
I. 必須以_
舞萄、$
和英文字母開頭
一定要記住 數(shù)字(0-9) 是不能出現(xiàn)在開頭的
_
開頭的一般都是別的碼農(nóng)不想讓你動的變量眨补, No zuo no die
$
開頭的變量最典型的就是jquery
$(document).ready(function(){
$("p").click(function(){
$(this).hide();
});
});
在最新的ECMA規(guī)范中,私有變量以
#
開頭倒脓,但是這種命名方式正在被碼農(nóng)上書請愿改為以_
開頭撑螺,這也是在沒有私有變量之前碼農(nóng)們的相互約定
II.可以使用數(shù)字、英文字母崎弃、_
甘晤、 $
作為后續(xù)的命名,并嚴格區(qū)分大小寫
因此 a
和 A
是兩個完全不相同的變量
III. 變量名不能為關(guān)鍵字
例如吊履,以下的代碼是不合法的
let var
但由于歷史遺留問題安皱,使用 var
關(guān)鍵字聲明變量時 let
可以作為變量名
因此调鬓,以下的代碼是合法的
var let
給變量賦值
在只聲明變量且未賦值之前艇炎,所有變量的默認值為關(guān)鍵字 undefined
賦值格式 變量名 = 你要賦的值
賦值語句是有返回值的,因此賦值語句其實是表達式腾窝,它的返回值是 =
右側(cè)的值
在聲明變量時給變量賦值
聲明格式 [let|var] 變量名 = 變量的初值
給變量賦值也叫做變量的初始化
任何在聲明變量時給變量賦值的表達式都可以拆成一個語句和一個表達式
例如var a = 20
和下面的代碼等價
var a; //語句
a = 20 //表達式
因此 var a = 20
是一個表達式缀踪,它的返回值為20
推薦的變量命名規(guī)則
小寫駝峰式命名法就是當變量名或函數(shù)名是由一個或多個單詞連結(jié)在一起,而構(gòu)成的唯一識別字時虹脯,第一個單詞以小寫字母開始驴娃;從第二個單詞開始以后的每個單詞的首字母都采用大寫字母,例如:myFirstName循集、myLastName唇敞,這樣的變量名看上去就像駱駝峰一樣此起彼伏,故得名咒彤。(引用自百度百科)
在ESLint
規(guī)范中默認要求變量命名法就是小寫駝峰式命名法(JavaScript和Java比較像的一點)
常量(ES6規(guī)范)
在ES6規(guī)范前疆柔,JavaScript是沒有常量的,只能通過ES5規(guī)范中 Object.defineProperty(obj, propertyName, fun)
來修改镶柱,但是早期的瀏覽器是不滋磁這種黑魔法的旷档。
具體可以參考這里
ES6規(guī)范引入了一個新的關(guān)鍵字 const
常量的聲明
聲明格式 const 常量名 = 常量值
注意,聲明常量時必須給常量賦值
下面的代碼是不合法的
const a;
常量不可被再賦值
既然是常量歇拆,那么它一經(jīng)賦值以后其值就不可改變鞋屈。因此,下面的代碼是不合法的
const a = 0;
a = 1;
const
和 let
關(guān)鍵字相同故觅,不能重復聲明一個常量
下面的代碼是不合法的
const a = 0;
const a = 1;
當使用 let
或 var
關(guān)鍵字聲明一個變量后厂庇,不能用 const
關(guān)鍵字聲明一個同名常量
下面的代碼是不合法的
let a; //var a;
const a = 0;
當使用 const
關(guān)鍵字聲明一個常量后,不能用 let
或 var
關(guān)鍵字聲明一個同名常量
下面的代碼是不合法的
const a = 0;
let a; //var a;