自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

幫你精通JS:變量的聲明,舉起與初始化的問(wèn)題

開(kāi)發(fā) 前端
本篇繼續(xù)給大家介紹關(guān)于JS的相關(guān)知識(shí),今天主要介紹變量的聲明,舉起與初始化的問(wèn)題。

[[391521]]

一、首先 JS 的舉起 Hoisting

觀察一下變量自舉的代碼:

  1. today = "Friday"
  2. console.log(today); 
  3. // Friday 
  4.  
  5. var today = "Monday!"

雖然declare的步驟在最后,但是today已經(jīng)順利打印出來(lái),這是因?yàn)閐eclare被hoist到頂部。

  1. var today;           // hoisted declaration 
  2. today = "Friday";    // the original line 1 
  3. console.log(today);  // Hello! 
  4. today = "Monday";    // `var` is gone! 

JSEngine事先將var舉到頂部執(zhí)行,并初始化值undefined.

接著查看function自舉:

  1. today(); 
  2. // Friday! 
  3.  
  4. function today() { 
  5.     console.log("Friday"); 

同樣的原理在complie的步驟中,事先將所有的function都解析成AST,因此也就都hoist到了頂部。

繼續(xù)考察function與variable二者的組合。

  1. today = "Friday"
  2. printToday(); 
  3. // Today is Friday. 
  4.  
  5. function printToday() { 
  6.     console.log(`Today is ${ today }!`); 
  7. var today; 

實(shí)際的執(zhí)行是先將function舉起,再將var舉起。

  1. function printToday() { 
  2.     console.log(`Today is ${ today }!`); 
  3. var today; 
  4. today = "Friday"
  5. printToday(); 
  6. // Today is Friday. 

二、重復(fù)declare的問(wèn)題

考察下面的代碼:

  1. let keepMoving = true
  2. while (keepMoving) { 
  3.     let value = Math.random(); 
  4.     if (value > 0.5) { 
  5.         keepMoving = false
  6.     } 

乍一看,似乎每次循環(huán)都會(huì)執(zhí)行`let value = Math.random();`,但實(shí)際上只執(zhí)行一次,執(zhí)行一次后,declare 的部分將會(huì)從代碼中移除。

三、變量初始化的問(wèn)題TDZ問(wèn)題

除了var之外,let也將舉起,只是不會(huì)被初始化:

  1. var studentName = "Timy"
  2.  
  3.     console.log(studentName); 
  4.     // ??? 
  5.  
  6.     let studentName = "Smith"
  7.  
  8.     console.log(studentName); 
  9.     // Smith 

第一個(gè)console不會(huì)輸出 "Timy"而是會(huì)報(bào)錯(cuò),說(shuō)明let也被舉起,只是沒(méi)有被初始化。

解決此問(wèn)題的方法就是將所有的let,const等全部都寫(xiě)到頂部。

 

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2009-06-11 13:26:16

Java數(shù)組聲明創(chuàng)建

2012-05-23 12:46:53

JavaJava類(lèi)

2009-07-03 16:21:33

Java的聲明和初始化Java

2009-08-31 10:38:34

C#變量初始化

2020-12-03 09:50:52

容器IoC流程

2015-10-30 09:51:19

Java重寫(xiě)初始化隱患

2010-03-25 14:42:33

2011-06-09 14:13:06

C++JAVA缺省初始化

2012-04-09 13:43:12

Java

2009-10-20 14:03:48

VB.NET數(shù)組聲明VB.NET數(shù)組初始化

2024-06-17 10:45:57

C語(yǔ)言編程變量容器

2023-12-04 10:57:52

函數(shù)C++

2010-02-24 15:41:19

Linux Light

2023-07-13 09:13:18

Docker容器

2009-06-10 16:17:00

Netbeans JT初始化

2012-03-13 13:38:42

Java

2021-07-07 05:00:17

初始化源碼

2021-03-05 07:45:59

JSreducemap

2011-03-16 10:52:20

2021-04-08 09:14:24

js前端函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)