var、let合溺、const 及for循環(huán)中l(wèi)et卒密、var的區(qū)別

一、區(qū)別

1. var

沒有塊的概念棠赛,可以跨塊訪問哮奇,但不能跨函數(shù)訪問;
②作用域在該語句所在的函數(shù)內(nèi)睛约,且存在變量提升現(xiàn)象鼎俘;
(啥?你問我啥是塊辩涝?像for贸伐、if等這些創(chuàng)建的{},都屬于塊作用域)

function bar(){
  {
    var a = 1
  }
  console.log(a)
}
bar()  //  1

function bar(){
  {
    let a = 1
  }
  console.log(a)
}
bar()  //  ReferenceError: a is not defined
for(i = 1; i < 5; i++){
       console.log(i);//1 2 3 4
 }
 console.log(i);//5

for(let j = 1; j < 5; j++){
        console.log(j);//1 2 3 4
 }
console.log(j);//ReferenceError: j is not defined  因?yàn)閖只在for那個(gè)塊里定義了

2. let

①只能在塊作用域里訪問怔揩,不可以跨塊訪問捉邢,更不能跨函數(shù)訪問脯丝;
②作用域在該語句所在的代碼塊中,且不存在變量提升現(xiàn)象伏伐;
③let在相同的作用域下宠进,不允許重復(fù)聲明變量;
④存在暫時(shí)性死區(qū)藐翎,在變量聲明之前是不能使用的砰苍,否則會(huì)報(bào)錯(cuò);

3. const

①const用來定義常量阱高,使用時(shí)必須初始化(即必須賦值赚导,不賦值就會(huì)報(bào)錯(cuò));
②和let一樣只能在塊作用域里訪問赤惊,而且不能修改吼旧;
③const聲明的常量也是不提升,同樣存在暫時(shí)性死區(qū)未舟,只能在聲明的位置后面使用圈暗,而且也是不能重復(fù)聲明;
但是T0颉T贝!

image.png

二昼扛、for循環(huán)與let寸齐、var

1、第一種

  • 結(jié)果:1s后打印出6個(gè)6抄谐;
  • 詳解:
    ①首先它會(huì)先執(zhí)行同步代碼即6個(gè)循環(huán)代碼渺鹦,同步代碼執(zhí)行完畢后,再執(zhí)行異步代碼即setTimeout里的函數(shù)蛹含;
    ②因?yàn)閘et是聲明在循環(huán)外的毅厚,每次同步的循環(huán)代碼執(zhí)行時(shí),i是在同一個(gè)作用域下浦箱,所以每次循環(huán)的時(shí)候變化的是同一個(gè)i吸耿;
    ③當(dāng)開始執(zhí)行異步代碼時(shí),這時(shí)的i已經(jīng)是6了酷窥,所以執(zhí)行6個(gè)異步的console.log(i)咽安,就會(huì)打印出6個(gè)6了;
function f1(){
  let i
  for(i=0; i<6; i++){
    setTimeout(()=>{console.log(i)}, 1000)
  }
}
f1()

2竖幔、第二種

  • 結(jié)果:1s后打印出012345板乙;
  • 詳解:
    ①它與上面的不同點(diǎn)就是在于let聲明的位置是偷,這里let是在每次循環(huán)的時(shí)候都去聲明一個(gè)i拳氢,所以每次循環(huán)的i都不是同一個(gè)募逞,這樣最后就會(huì)打印出當(dāng)時(shí)循環(huán)體聲明的i,即012345
function f2(){
  for(let i=0; i<6; i++){
    setTimeout(()=>{console.log(i)}, 1000)
  }
}
f2()

3馋评、第三種

  • 結(jié)果:1s后打印出012345放接;它跟第二種結(jié)果是一樣的,只是實(shí)現(xiàn)方式不同留特;
  • 詳解:
    ①用var來聲明纠脾,但是var會(huì)提升至函數(shù)頭部;
    ②把setTimeout放到一個(gè)立即執(zhí)行函數(shù)中去蜕青,并把每一次循環(huán)的i傳進(jìn)去苟蹈,這樣每一個(gè)setTimeout接受到的就是不同的i了;
function f3(){
  for(var i=0; i<6; i++){
    !function(i){
      setTimeout(()=>{console.log(i)}, 1000)
    }(i)
  }
}
f3()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末右核,一起剝皮案震驚了整個(gè)濱河市慧脱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贺喝,老刑警劉巖菱鸥,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異躏鱼,居然都是意外死亡氮采,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門染苛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹊漠,“玉大人,你說我怎么就攤上這事茶行∶衬兀” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵拢军,是天一觀的道長楞陷。 經(jīng)常有香客問我,道長茉唉,這世上最難降的妖魔是什么固蛾? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮度陆,結(jié)果婚禮上艾凯,老公的妹妹穿的比我還像新娘。我一直安慰自己懂傀,他們只是感情好趾诗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般恃泪。 火紅的嫁衣襯著肌膚如雪郑兴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天贝乎,我揣著相機(jī)與錄音情连,去河邊找鬼。 笑死览效,一個(gè)胖子當(dāng)著我的面吹牛却舀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锤灿,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼挽拔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了但校?” 一聲冷哼從身側(cè)響起篱昔,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎始腾,沒想到半個(gè)月后州刽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浪箭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年穗椅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奶栖。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匹表,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宣鄙,到底是詐尸還是另有隱情袍镀,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布冻晤,位于F島的核電站苇羡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鼻弧。R本人自食惡果不足惜设江,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望攘轩。 院中可真熱鬧叉存,春花似錦、人聲如沸度帮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞳秽,卻和暖如春瓣履,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寂诱。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工拂苹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留安聘,地道東北人痰洒。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像浴韭,于是被迫代替她去往敵國和親丘喻。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355