成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 中的“提升”是怎么回事?

開發(fā) 前端
在執(zhí)行JavaScript代碼之前,js引擎首先會對其進行解析和編譯。在編譯階段,變量和函數(shù)聲明被放入內存,這被稱為提升(hoisting)。

在執(zhí)行JavaScript代碼之前,js引擎首先會對其進行解析和編譯。在編譯階段,變量和函數(shù)聲明被放入內存,這被稱為提升(hoisting)。

需要注意的是,聲明只是被提升,而不是被初始化,這意味著如果一個變量在使用后被聲明并初始化,則不會初始化它的值。

[[403683]]

function

使用 function 聲明時,可以在定義之前調用這個函數(shù),它會按預期正常工作。例如:

  1. hello(); // 輸出 'Hello world!' 
  2.  
  3. function hello() { 
  4.   console.log('Hello world!'); 
  5.  
  6. hello(); // 輸出 'Hello world!' 

在上面的例子中, function 聲明被提升到其作用域的頂部,并且由于函數(shù)聲明的性質,在聲明之前就可用。不過這是函數(shù)提升行為的唯一案例。

var

另一方面,var 聲明的行為有所不同,在其初始化之前進行訪問會返回 undefined。例如:

  1. console.log(x); // 輸出 'undefined' 
  2. f(); // 拋出異常:'Uncaught TypeError: f is not a function' 
  3.  
  4. var x = 1
  5. var f = () => 'Hi!'; 
  6.  
  7. console.log(x); // 輸出 '1' 
  8. f(); // 返回 'Hi!' 

正如你在這個例子中所看到的,var 聲明被提升到它作用域的頂部,但是變量的值只有在初始化代碼被執(zhí)行時才會初始化,所以在初始化這行代碼之前是 undefined。

const 和 let

const 和 let 聲明被提升,但它們沒有被初始化為 undefined。而是會給你一個錯誤,這也是 class 聲明的行為方式。例如:

  1. console.log(y); // 拋出異常: 'Uncaught ReferenceError: Cannot access "y" before initialization' 
  2. g();  // 拋出異常: 'Uncaught ReferenceError: Cannot access "g" before initialization' 
  3.  
  4. let y = 2
  5. const g = () => 'Hey!'; 
  6.  
  7. console.log(y); // 輸出 '2' 
  8. f(); // 返回 'Hey!' 

一般情況下,在初始化之前訪問用 var 聲明的變量會默默地失敗,對 const 或 let做同樣的事情會導致一個清晰的、易于調試的錯誤。

總結

 

  • 在使用變量、函數(shù)、對象和類之前,務必要先定義它們。ESLint 可能可以幫你解決這個問題。
  • 在項目中要盡可能的使用 const 和 let,而不是 var 。這樣可以減少很多麻煩。
  • 如果可能的話,只使用箭頭函數(shù)或 function 聲明。一致性有助于減少混亂。

 

責任編輯:趙寧寧 來源: 前端先鋒
相關推薦

2023-03-29 08:24:30

2020-02-18 11:19:36

物聯(lián)網(wǎng)病毒物聯(lián)網(wǎng)IOT

2021-07-31 19:21:34

Python下劃線數(shù)值

2022-04-15 08:54:39

PythonAsync代碼

2024-01-08 08:35:28

閉包陷阱ReactHooks

2016-11-22 19:54:56

點擊率預估推薦算法廣告

2023-10-12 08:54:20

Spring事務設置

2013-04-18 09:56:05

2023-03-05 15:41:58

MySQL日志暴漲

2021-05-11 11:51:15

飛機Wi-Fi通信

2018-05-08 08:46:47

Linux內存釋放

2021-08-10 09:28:10

ViteES Modules Dev Server

2021-07-30 07:28:16

偽類偽元素CSS

2017-11-24 11:10:38

區(qū)塊鏈礦工分叉

2022-12-13 08:36:42

D-SMARTOracle數(shù)據(jù)庫

2021-10-15 21:16:00

手機內存漏洞

2025-06-11 04:00:00

增量計算Lamda架構

2015-03-25 14:44:05

DNS蘋果

2024-04-30 11:21:04

瀏覽器指紋瀏覽器

2019-07-23 15:34:29

MySQL存儲引擎
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 二区在线观看 | 懂色av蜜桃av | 午夜影院在线观看免费 | 国产在线网址 | 伊人网综合 | 99久久精品一区二区成人 | 日本超碰 | 久久成人一区 | 国产日韩欧美一区 | 欧美在线看片 | 国产一区二区三区久久久久久久久 | 成人午夜在线 | 精品久久久久一区二区国产 | 天天插天天狠天天透 | 欧美性猛交一区二区三区精品 | 午夜精品久久久久久久星辰影院 | av在线视 | 99热精品国产 | av高清毛片 | av网站免费看 | 亚洲免费高清 | 五月花丁香婷婷 | a级毛片基地 | 精品久久国产老人久久综合 | 麻豆一区一区三区四区 | 欧美日韩精品影院 | 国产一区二区视频在线观看 | 日本精品视频一区二区 | 免费成人高清在线视频 | 国产福利精品一区 | 三级成人在线 | 日日干日日| 精品亚洲视频在线 | 免费黄色录像片 | 国产精品观看 | 国产精品不卡 | 日韩在线观看网站 | 国产色网 | 日韩欧美视频 | 在线欧美视频 | 国产h在线 |