什么是變量提升(hoisting)?它在JavaScript中是如何工作的?

聚沙成塔·每天進步一點點

  • ? 專欄簡介
  • ? 變量提升(Hoisting)
  • ? 變量提升的示例:
  • ? 寫在最后


? 專欄簡介

前端入門之旅:探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅

歡迎來到前端入門之旅!這個專欄是為那些對Web開發感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發者,這里都將為你提供一個系統而又親切的學習平臺。在這個專欄中,我們將以問答形式每天更新,為大家呈現精選的前端知識點和常見問題解答。通過問答形式,我們希望能夠更直接地回應讀者們對于前端技術方面的疑問,并且幫助大家逐步建立起一個扎實的基礎。無論是HTML、CSS、JavaScript還是各種常用框架和工具,我們將深入淺出地解釋概念,并提供實際案例和練習來鞏固所學內容。同時,我們也會分享一些實用技巧和最佳實踐,幫助你更好地理解并運用前端開發中的各種技術。

在這里插入圖片描述

不僅如此,我們還會定期推出一些項目實戰教程,讓你能夠將所學知識應用到實際開發中。通過實際項目的練習,你將能夠更好地理解前端開發的工作流程和方法論,并培養自己解決問題和獨立開發的能力。我們相信,只有不斷積累和實踐,才能真正掌握前端開發技術。因此,請準備好迎接挑戰,勇敢地踏上這段前端入門之旅!無論你是尋找職業轉型、提升技能還是滿足個人興趣,我們都將全力以赴,為你提供最優質的學習資源和支持。讓我們一起探索Web開發的奇妙世界吧!加入前端入門之旅,成為一名出色的前端開發者! 讓我們啟航前端之旅


? 變量提升(Hoisting)

變量提升是 JavaScript 中的一種行為,它指的是在代碼執行之前,JavaScript 引擎會將變量和函數聲明提升到它們所在作用域的頂部。雖然在代碼中,變量和函數的聲明通常出現在它們被使用的位置之后,但由于變量提升的存在,它們實際上在代碼執行前就已經存在于內存中了。

變量提升是 JavaScript 解釋器的一種默認行為,它有助于理解以下幾個重要概念:

  1. 聲明和初始化:在變量提升階段,只有聲明被提升,而初始化(賦值)仍然留在原來的位置。這意味著變量在被使用之前已經存在,但它們的值是 undefined

  2. 函數聲明和函數表達式:函數聲明(function declaration)也會被提升,而函數表達式(function expression)不會完全提升,只有函數名會被提升。

  3. 作用域:變量提升是在當前作用域內進行的,所以在不同作用域內聲明的變量會在各自的作用域內提升。


? 變量提升的示例:

console.log(x); // 輸出:undefined
var x = 10;

在上述示例中,變量 x 被提升到頂部,但它的值在聲明之前被訪問,因此輸出 undefined

foo(); // 輸出:Hello, world!
function foo() {console.log("Hello, world!");
}

在這個示例中,函數 foo 被完全提升,因此可以在聲明之前調用它。

需要注意的是,雖然變量提升在 JavaScript 中是一種默認行為,但最佳實踐是在變量使用之前進行聲明和初始化,以提高代碼的可讀性和可維護性。此外,了解變量提升的工作原理有助于避免潛在的錯誤和誤解。


? 寫在最后

本專欄適用讀者比較廣泛,適用于前端初學者;或者沒有學過前端對前端有興趣的伙伴,亦或者是后端同學想在面試過程中能夠更好的展示自己拓展一些前端小知識點,所以如果你具備了前端的基礎跟著本專欄學習,也是可以很大程度幫助你查漏補缺,由于博主本人是自己再做內容輸出,如果文中出現有瑕疵的地方各位可以通過主頁的左側聯系我,我們一起進步,與此同時也推薦大家幾份專欄,有興趣的伙伴可以訂閱一下:除了下方的專欄外大家也可以到我的主頁能看到其他的專欄;

前端小游戲(免費)這份專欄將帶你進入一個充滿創意和樂趣的世界,通過利用HTML、CSS和JavaScript的基礎知識,我們將一起搭建各種有趣的頁面小游戲。無論你是初學者還是有一些前端開發經驗,這個專欄都適合你。我們會從最基礎的知識開始,循序漸進地引導你掌握構建頁面游戲所需的技能。通過實際案例和練習,你將學會如何運用HTML來構建頁面結構,使用CSS來美化游戲界面,并利用JavaScript為游戲添加交互和動態效果。在這個專欄中,我們將涵蓋各種類型的小游戲,包括迷宮游戲、打磚塊、貪吃蛇、掃雷、計算器、飛機大戰、井字游戲、拼圖、迷宮等等。每個項目都會以簡潔明了的步驟指導你完成搭建過程,并提供詳細解釋和代碼示例。同時,我們也會分享一些優化技巧和最佳實踐,幫助你提升頁面性能和用戶體驗。無論你是想尋找一個有趣的項目來鍛煉自己的前端技能,還是對頁面游戲開發感興趣,前端小游戲專欄都會成為你的最佳選擇。點擊訂閱前端小游戲專欄

在這里插入圖片描述

Vue3通透教程【從零到一】(付費) 歡迎來到Vue3通透教程!這個專欄旨在為大家提供全面的Vue3相關技術知識。如果你有一些Vue2經驗,這個專欄都能幫助你掌握Vue3的核心概念和使用方法。我們將從零開始,循序漸進地引導你構建一個完整的Vue應用程序。通過實際案例和練習,你將學會如何使用Vue3的模板語法、組件化開發、狀態管理、路由等功能。我們還會介紹一些高級特性,如Composition API和Teleport等,幫助你更好地理解和應用Vue3的新特性。在這個專欄中,我們將以簡潔明了的步驟指導你完成每個項目,并提供詳細解釋和示例代碼。同時,我們也會分享一些Vue3開發中常見的問題和解決方案,幫助你克服困難并提升開發效率。無論你是想深入學習Vue3或者需要一個全面的指南來構建前端項目,Vue3通透教程專欄都會成為你不可或缺的資源。點擊訂閱Vue3通透教程【從零到一】專欄

在這里插入圖片描述

TypeScript入門指南(免費) 是一個旨在幫助大家快速入門并掌握TypeScript相關技術的專欄。通過簡潔明了的語言和豐富的示例代碼,我們將深入講解TypeScript的基本概念、語法和特性。無論您是初學者還是有一定經驗的開發者,都能在這里找到適合自己的學習路徑。從類型注解、接口、類等核心特性到模塊化開發、工具配置以及與常見前端框架的集成,我們將全面覆蓋各個方面。通過閱讀本專欄,您將能夠提升JavaScript代碼的可靠性和可維護性,并為自己的項目提供更好的代碼質量和開發效率。讓我們一起踏上這個精彩而富有挑戰性的TypeScript之旅吧!點擊訂閱TypeScript入門指南專欄

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42993.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42993.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42993.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

7.3 C/C++ 實現順序棧

順序棧是一種基于數組實現的棧結構,它的數據元素存儲在一段連續的內存空間中。在順序棧中,棧頂元素的下標是固定的,而棧底元素的下標則隨著入棧和出棧操作的進行而變化。通常,我們把棧底位置設置在數組空間的起始處,這…

C++11并發與多線程筆記(9) async、future、packaged_task、promise

C11并發與多線程筆記(9) async、future、packaged_task、promise 1、std::async、std::future創建后臺任務并返回值2、std::packaged_task:打包任務,把任務包裝起來3、std::promise3、小結 1、std::async、std::future創建后臺任務…

C++友元函數和友元類

友元 1.友元介紹2.類友元2.1示例代碼 3.函數友元3.1示例代碼 4.總結 1.友元介紹 在C中,友元(friend)是一種機制,允許某個類或函數訪問其他類的私有成員。通過友元,可以授予其他類或函數對該類的私有成員的訪問權限。友…

哈工大開源“活字”對話大模型

一、介紹 大規模語言模型(LLM)在自然語言處理的通用領域已取得了令人矚目的成功。對于廣泛的應用場景,這種技術展示了強大的潛力,學術界和工業界的興趣也持續升溫。哈工大自然語言處理研究所30余位老師和學生參與開發了通用對話大…

re學習(35)攻防世界-no-strings-attached(動調)

參考文章:re學習筆記(28)攻防世界-re-no-strings-attached_Forgo7ten的博客-CSDN博客 攻防世界逆向入門題之no-strings-attached_攻防世界 no-strings-attached_沐一 林的博客-CSDN博客 本人題解: 扔入Exepeinfo中查殼和其他信息…

LVS-DR模型實例

一、LVS-DR集群介紹 LVS-DR(Linux Virtual Server Director Server)工作模式,是生產環境中最常用的一 種工作模式。 1、LVS-DR 工作原理 LVS-DR 模式,Director Server 作為群集的訪問入口,不作為網關使用&#xff0…

python+django+mysql項目實踐五(信息搜索)

python項目實踐 環境說明: Pycharm 開發環境 Django 前端 MySQL 數據庫 Navicat 數據庫管理 信息搜素 輸入內容進行搜索,內容有文本類和時間類 文本類需要模糊搜索,包含即檢索 時間類需要選取時間范圍內的內容 views 利用Q完成對指定內容的檢索 檢索后按檢索內容更新…

HarmonyOS/OpenHarmony應用開發-ArkTS語言渲染控制ForEach循環渲染

ForEach基于數組類型數據執行循環渲染。說明,從API version 9開始,該接口支持在ArkTS卡片中使用。 一、接口描述 ForEach(arr: any[], itemGenerator: (item: any, index?: number) > void,keyGenerator?: (item: any, index?: number) > stri…

網絡綜合布線實訓室建設方案

一、網絡綜合布線系統概述 網絡綜合布線系統是為了滿足數據通信需求而設計和建立的一套基礎設施。它提供了數據傳輸、信號傳輸和電力供應的基礎結構,支持各種網絡設備和終端設備之間的連接。 網絡綜合布線系統通常包括以下組成部分: 1) 數據…

面試題 17.10 主要元素

??題目來源: leetcode題目,網址:面試題 17.10. 主要元素 - 力扣(LeetCode) 解題思路: 首先,順序遍歷數組,將不同的數字消去,最后留下的數字若計數小于等于 0&#xff…

ZooKeeper集群服務器啟動

在本文中,我們將對集群版ZooKeeper服務器的啟動過程做詳細講解。集群和單機ZooKeeper服務器的啟動過程在很多地方都是一致的,因此本節只會對有差異的地方展開進行講解。下圖所示是集群版ZooKeeper服務器的啟動流程圖。 預啟動 預啟動的步驟如下。 (1)統…

Python高光譜遙感數據處理與高光譜遙感機器學習方法教程

詳情點擊鏈接:Python高光譜遙感數據處理與高光譜遙感機器學習方法教程 第一:高光譜基礎 一:高光譜遙感基本 01)高光譜遙感 02)光的波長 03)光譜分辨率 04)高光譜遙感的歷史和發展 二:高光譜傳感器與數據獲取 01)高光譜遙感…

AI搜索引擎助力科學家創新

開發者希望通過幫助科學家從大量文獻中發現聯系從而解放科學家,讓他們專注于發現和創新。 圖片來源:The Project Twins 對于專注于歷史的研究者Mushtaq Bilal來說,他在未來科技中投入了大量時間。 Bilal在丹麥南部大學( Universit…

預訓練GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks

一.文章概述 本文提出了一種自監督屬性圖生成任務來預訓練GNN,使得其能捕圖的結構和語義屬性。作者將圖的生成分為兩個部分:屬性生成和邊生成,即給定觀測到的邊,生成節點屬性;給定觀測到的邊和生成的節點屬性&#xf…

自動駕駛港口車輛故障及事故處理機制

1、傳感器故障: (1)單一傳感器數據異常處理。自動駕駛電動平板傳感方案為冗余設置,有其他傳感器能夠覆蓋故障傳感器觀測區域,感知/定位模塊將數據異常情況發給到規劃決策模塊,由“大腦”向中控平臺上報故障…

視頻集中存儲/云存儲/磁盤陣列EasyCVR平臺接入RTSP設備出現離線情況的排查

安防視頻監控/視頻集中存儲/云存儲/磁盤陣列EasyCVR平臺可拓展性強、視頻能力靈活、部署輕快,可支持的主流標準協議有國標GB28181、RTSP/Onvif、RTMP等,以及支持廠家私有協議與SDK接入,包括海康Ehome、海大宇等設備的SDK等。平臺既具備傳統安…

QT處理日志文件

由于實際生產需要,軟件系統的運行,會產生大量的日志文件,有時候一天就能產生超過百萬條log記錄,那么為了能夠處理日志文件,查詢并且找到我們想要的報錯信息,因此不得不考慮怎么實現,打開大日志文…

ARM--day2(cpsr、spsr、數據搬移指令、移位操作指令、位運算操作指令、算數運算指令、比較指令、跳轉指令)

.text .global _gcd _gcd:mov r0,#9mov r1,#15b loop loop:cmp r0,r1beq stopsubhi r0,r1bhi loopsubcc r1,r0bcc loopstop:b stop.end用for循環實現1~100之間和5050 .text .global _gcd _gcd:mov r0,#0x0mov r1,#0x1mov r2,#0x64b loop loop:cmp r1,r2bhi stopadd r0,r0,r1ad…

【Unity】坐標轉換經緯度方法(應用篇)

【Unity】坐標轉換經緯度方法(應用篇) 解決地圖中經緯度坐標轉換與unity坐標互轉的問題。使用線性變換的方法,理論上可以解決小范圍內所以坐標轉換的問題。 之前有寫過[Unity]坐標轉換經緯度方法(原理篇),在實際使用中&#xff0c…

R語言實現免疫浸潤分析(2)

原始數據承接免疫浸潤分析&#xff08;1&#xff09;&#xff0c;下面展示免疫浸潤結果&#xff1a; #直接使用IOBR包內的cell_bar_plot pic<-cell_bar_plot(input quantiseq_immo_de[1:20,], title "quanTiseq Cell Fraction") #使用ggplot2 library(ggplot2)…