從本篇博客開始 博主個(gè)人認(rèn)為重要的知識(shí)點(diǎn)都會(huì)在在行前添加 ? 來進(jìn)行標(biāo)識(shí)
創(chuàng)新互聯(lián)建站專注于網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
ECMASCRIPT變量是松散類型,意思是變量可以用于保存任何類型的數(shù)據(jù)。ECMASCRIPT中有三個(gè)關(guān)鍵字可以來聲明變量:var、let和const。
值得注意的是let和const只能在ES6以及更晚的版本中使用。
定義變量的基本方式:
var message;//個(gè)人不推薦,在不初始化的情況下定義變量,就會(huì)保存一個(gè)特殊的值undefinded。
var car="奔馳";//ECMASCRIPT 實(shí)現(xiàn)變量初始化,此時(shí)就可以定義變量并設(shè)置它的初始值。
car=100;//合法,但是不推薦。
上面對(duì)于car變量的操作中,有一點(diǎn)值得注意,car變量首先被定義為一個(gè)字符串變量,后來又被賦值為數(shù)值。雖然這在ECMASCRIPT中完全合法,但是想想當(dāng)項(xiàng)目龐大起來,一個(gè)能被隨意賦值的變量會(huì)給項(xiàng)目增加多大的維護(hù)難度。這可能就是為啥現(xiàn)在TypeScript那么被青睞的原因之一。
?var是函數(shù)作用域,也就是說在函數(shù)內(nèi)定義變量 在會(huì)在函數(shù)內(nèi)部生效,并在函數(shù)退出時(shí)銷毀該變量,這里就會(huì)涉及到j(luò)s的垃圾回收機(jī)制。后面寫到的再細(xì)說,示例代碼如下:
function myfun(){
var message='hello';
//message=hello'; 合法,但不推薦,這樣可以再局部作用域中定義全局變量。不推薦的原因也是因?yàn)椴缓镁S護(hù),畢竟想想就很奇怪
}
myfun();
console.log(message);//報(bào)錯(cuò)
?使用var聲明變量會(huì)把變量自動(dòng)提升到函數(shù)作用域頂部。
function foo(){
console.log(name);
var name='Mercy';
}
foo();//undefined
之所以不會(huì)報(bào)錯(cuò),是因?yàn)镋CMASCRIPT把他等價(jià)于如下代碼:
function foo(){
var name;
console.log(name);
name='Mercy';
}
foo();//undefined
?let跟var的作用差不多,但是有著非常重要的區(qū)別。最明顯的區(qū)別就是,let聲明的范圍是塊作用域,而var聲明的范圍是函數(shù)作用域。啥是塊作用域通俗點(diǎn)講就是 花括號(hào) { } 包裹的代碼塊。
if(true){
var name='Mercy';
cosnole.log(name);//Mercy
}
cosnole.log(name);//Mercy
if(true){
let name='Mercy';
cosnole.log(name);//Mercy
}
cosnole.log(name);//ReferenceError:name 沒有定義
?let也不允許同一個(gè)塊作用域中出現(xiàn)冗余聲明。
var name;
var name;
let age;
let age;//SyntaxError:標(biāo)識(shí)符age已經(jīng)聲明過了
?let與var的另一個(gè)重要的區(qū)別就是let聲明的變量不會(huì)再作用域中被提升。
cosnole.log(age);
let age=22;//ReferenceError:age 沒有定義
在let聲明之前的執(zhí)行瞬間被稱為“暫時(shí)性死區(qū)”,在此階段引用后面才聲明的變量都會(huì)拋出ReferenceError。
?與var關(guān)鍵字不同,使用let在全局作用域中聲明的變量不會(huì)成為為window對(duì)象的屬性(var聲明的變量則會(huì))。
var name = 'Matt';
console.log(window.name); // 'Matt'
let age = 26;
console.log(window.age); // undefined
---持續(xù)更新中---