變量與常量

變量

變量的聲明

在JavaScript中怪得,聲明變量的關(guān)鍵字為varlet (ES6規(guī)范)

當只聲明變量時编曼,聲明為語句

語句沒有返回值或返回值纤泵,表達式有返回值铣口。
(一些說法把返回值為 undefinedvoid 的判定為語句黔寇,否則判定為表達式偶器。)

使用 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)鍵字

不可以使用 letvar 關(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ū)分大小寫

因此 aA 是兩個完全不相同的變量

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;

constlet 關(guān)鍵字相同故觅,不能重復聲明一個常量

下面的代碼是不合法的

const a = 0;
const a = 1;

當使用 letvar 關(guān)鍵字聲明一個變量后厂庇,不能用 const 關(guān)鍵字聲明一個同名常量

下面的代碼是不合法的

let a; //var a;
const a = 0;

當使用 const 關(guān)鍵字聲明一個常量后,不能用 letvar 關(guān)鍵字聲明一個同名常量

下面的代碼是不合法的

const a = 0;
let a; //var a;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末输吏,一起剝皮案震驚了整個濱河市权旷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌评也,老刑警劉巖炼杖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灭返,死亡現(xiàn)場離奇詭異,居然都是意外死亡坤邪,警方通過查閱死者的電腦和手機熙含,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艇纺,“玉大人怎静,你說我怎么就攤上這事∏猓” “怎么了蚓聘?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盟劫。 經(jīng)常有香客問我夜牡,道長,這世上最難降的妖魔是什么侣签? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任塘装,我火速辦了婚禮,結(jié)果婚禮上影所,老公的妹妹穿的比我還像新娘蹦肴。我一直安慰自己,他們只是感情好猴娩,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布阴幌。 她就那樣靜靜地躺著,像睡著了一般卷中。 火紅的嫁衣襯著肌膚如雪矛双。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天仓坞,我揣著相機與錄音背零,去河邊找鬼。 笑死无埃,一個胖子當著我的面吹牛徙瓶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫉称,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侦镇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了织阅?” 一聲冷哼從身側(cè)響起壳繁,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闹炉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒿赢,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年渣触,在試婚紗的時候發(fā)現(xiàn)自己被綠了羡棵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗅钻,死狀恐怖皂冰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情养篓,我是刑警寧澤秃流,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站柳弄,受9級特大地震影響舶胀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜语御,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一峻贮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧应闯,春花似錦、人聲如沸挂捻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刻撒。三九已至骨田,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間声怔,已是汗流浹背态贤。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留醋火,地道東北人悠汽。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像芥驳,于是被迫代替她去往敵國和親柿冲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容