javaScript的面試重點--預解析

目錄

一.前言

二.預解析案例


一.前言

? ? ? ? 關于預解析,我們通過今天學習就能夠知道解析器運行JS分為哪兩步;能夠說出變量提升的步驟和運行過程;能夠說出函數提升的步驟和運行過程。

二.預解析案例

? ? ? ? 預解析,簡而言之,也就是javaScript解析器在運行javaScript代碼的時候所進行的第一步。第二步則就是執行代碼,按照代碼書寫的順序從上往下執行。

? ? ? ? 在預解析過程中,JS引擎會把JS里面所有的var還有function提升到當前作用域的最前面。其中預解析又可以分為變量預解析(變量提升)和函數預解析(函數提升)。

? ? ? ? 下面我們來分析下以下代碼的執行結果:

console.log(num1)var num1=10

? ? ? ?

?????????在我們聲明賦值num1變量的前面,就執行了輸出num1的表達式,這樣的結果會是什么呢?

我們來看下執行結果:

????????

? ? ? ? 通過運行編譯我們會發現我們的執行結果是undefined,為什么會是這樣的結果呢?

? ? ? ?這就是我們預解析的神奇之處,下面我們來分析下這個預解析的詳細過程。

? ? ? ? 因為上面那個案例有變量的聲明,根據我們的變量預解析,再將變量提升之后,實際上執行的代碼如下:

????????

?var num1;console.log(num1)num1=10?

? ? ? ? ?

????????到這里我們就可以知道,變量提升就是把所有的變量聲明提升到當前作用域的最前面,但不提升賦值操作。因此這里我們的num1在聲明之后,由于沒有賦值,所以得到的結果自然也就是undefined了。

? ? ? ?

????????下面我們再來看看函數的預解析:

? ? ? ? 首先分析下下面這段代碼的執行結果會是什么樣的:

????????

function fn(){var a=b=c=7console.log(a)console.log(b)console.log(c)}fn()console.log(c)console.log(b)console.log(a)

? ? ? ? 結果可能出乎大家的意料哦,現在讓我們來看下結果:

????????

? ? ? ? 我們可以發現最后的結果是輸出5個7,跟最后一個未定義的報錯提示。

? ? ? ? ?現在我們來分析下結果,由于我們用var聲明多個變量的格式為:

var a=7,b=7,c=7

? ? ? ? ?中間只需用逗號隔開就可以了,而案例中的聲明其實是這樣的結果:

var a=7;
b=7;
c=7

? ? ? ?在函數中,沒有使用var聲明的變量就會從局部變量轉為全局變量,也就是說,案例中的b和c此刻都變成了全局變量。

????????因此我們在執行fn()這個函數的時候,就會把a,b,c的值都輸出出來,也就是3個7。再執行b和c的輸出,就把剩下的2個7給輸出來。由于a使用了var聲明,因此我們的a依然是fn函數里面的局部變量。因此最后的結果自然就是undefined啦。

? ? ? ? 最后,函數的提升也就是把所有的函數聲明提升到當前作用域的最前面,但不調用函數。

?

?

? ? ? ?

? ? ? ??

????????

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

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

相關文章

7.13實訓日志

上午 學習網絡安全的過程中,我們深入了解了網絡的不同層面和技術,從表層網絡到深網再到暗網,以及涉及的產業分類和技術工具。這些知識不僅幫助我們理解網絡的復雜性,還揭示了如何應對和防范各種網絡威脅。 首先,我們…

簡易秒表的實現

目錄 描述 輸入描述: 輸出描述: 參考代碼 描述 請編寫一個模塊,實現簡易秒表的功能:具有兩個輸出,當輸出端口second從1-60循環計數,每當second計數到60,輸出端口minute加一,一直…

當在多線程環境中使用 C++進行編程時,怎樣確保線程安全以及如何處理線程之間的同步和通信?

在C中確保線程安全性和處理線程之間的同步和通信有多種方法。下面是一些常用的技術和技巧: 互斥鎖:使用互斥鎖可以確保只有一個線程可以訪問共享資源。在訪問共享資源之前獲取鎖,在完成后釋放鎖。這可以防止多個線程同時訪問同一份數據&#…

007-端口隔離

端口隔離配置 端口隔離簡介 為了實現報文之間的二層隔離,可以將不同的端口加入不同的VLAN,但會浪費有限的VLAN資源。采用端口隔離特性,可以實現同一VLAN內端口之間的隔離。 設備支持以下方式進行端口隔離: 基于隔離組的端口隔…

中介子方程五十七

XXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXXiXhXXpXiXXpXXbXXiXOXWXyXkXXeXpXXαXXpXeXXkXyXWXOXiXXbXXpXXiXpXXhXiXXηXWXXhXuXVXXΣXXΣXyXiXXKXeXuXWXXyXLXαXXaXnXaXXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXXiXhXXpXiXXpXXbXXiXOXWXyXkXXeXpXXα…

理解JavaScript中的對象傳遞與賦值操作

在JavaScript中,對象傳遞和賦值操作是兩個非常重要的概念。它們在日常開發中扮演著關鍵角色,但也常常會讓人感到困惑。本文將通過兩個簡單的例子,更好地理解它們的區別和實際應用。 示例代碼1:修改對象屬性 我們先來看第一段示例…

【數據結構】順序表的應用

目錄 一.引言 二.順序表概念 三.順序表的實現 1.定義順序表 2.順序表初始化 ?編輯 3.檢查空間,如果滿了,進行增容 4.順序表尾插 5.順序表尾刪 6.順序表頭插 7.順序表頭刪 ?編輯 8.順序表查找 9.順序表在pos位置插入x 10.順序表刪…

展開說說:Android頁面繪制流程源碼解析

說到Android系統View的繪制流程,大家一定知道是分為測量(Measure)、布局(Layout)和繪制(Draw)三個階段,這篇文章主要聊一聊在這三個步驟之前的源碼執行流程,頁面啟動后是…

C語言丟失精度 如何實現高精度計算

(1)int 類型舉例 int :占4個字節,也就是32位,及最大值是2^32-11024*1024*1024*4-14294967295 以上說法錯誤,因為Int是有符號類型整數,所以最高位是符號位,及int的最大值應該是2^31…

【Java】鏈表的頭插法和尾插法

頭插法 頭插法就是在已有的節點的前面插入新節點 如何實現 (1)先定義一個節點類ListNode,里面有value值和地址 public class ListNode {int value;ListNode next;public ListNode(int value){this.value value;}Overridepublic String t…

開發指南046-機構樹控件

為了簡化編程&#xff0c;平臺封裝了很多前端組件。機構樹就是常用的組件之一。 基本用法&#xff1a; import QlmOrgTree from /qlmcomponents/tree/QlmOrgTree <QlmOrgTree></QlmOrgTree> 功能&#xff1a; 根據權限和控制參數顯示機構樹。機構樹數據來源于核…

讓我們一起來看看這些強大的中國汽車品牌如何勇攀巔峰!

咱們中國的汽車品牌&#xff0c;就是這么牛&#xff01;你知道嗎&#xff1f;他們已經悄悄崛起&#xff0c;一步步向著更廣闊的海外市場進軍了。盡管這個過程可能有點坎坷&#xff0c;但是“勇敢”始終是他們前行的動力&#xff0c;推動著他們不斷向前&#xff0c;打造屬于我們…

AGI 之 【Hugging Face】 的【文本摘要】的 [評估PEGASUS ] / [ 微調PEGASUS ] / [生成對話摘要] 的簡單整理

AGI 之 【Hugging Face】 的【文本摘要】的 [評估PEGASUS ] / [ 微調PEGASUS ] / [生成對話摘要] 的簡單整理 目錄 AGI 之 【Hugging Face】 的【文本摘要】的 [評估PEGASUS ] / [ 微調PEGASUS ] / [生成對話摘要] 的簡單整理 一、簡單介紹 二、文本摘要 三、在CNN/Daily…

秋招突擊——7/9——MySQL索引的使用

文章目錄 引言正文B站網課索引基礎創建索引如何在一個表中查看索引為字符串建立索引全文索引復合索引復合索引中的排序問題索引失效的情況使用索引進行排序覆蓋索引維護索引 數據庫基礎——文檔資料學習整理創建索引刪除索引創建唯一索引索引提示復合索引聚集索引索引基數字符串…

C#基于任務的異步模式(TAP)

1、C#異步模式分類 基于任務的異步模式&#xff08;TAP&#xff09; 基于事件的異步模式&#xff08;EAP&#xff09;和異步編程模型模式&#xff08;APM&#xff09; 2、基于任務的異步模式&#xff08;TAP&#xff09; 基于任務的異步模式&#xff08;TAP&#xff09;用單個方…

從零手寫實現 nginx-28-error pages 指令

前言 大家好&#xff0c;我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的&#xff0c;可以參考我的另一個項目&#xff1a; 手寫從零實現簡易版 tomcat minicat 手寫 nginx 系列 …

夾子音轉換器matlab

操作過程點擊此處觀看 上段時間補習了一下傅里葉變化的知識&#xff0c;突發奇想可以根據此做一款聲音轉換器&#xff0c;使用工科神器Matlab進行完成&#xff0c;并且開發了可操作界面如下圖所示&#xff1a; 功能實現與描述 軟件中可以實現聲音的錄制、回放、文件的保存與…

【C++】動態內存分配(關于構造與析構函數的調用)動態數組類 動態創建多維數組 知識點+代碼學習記錄

一.動態內存分配相關知識點 1.堆和棧內存&#xff1a; 堆內存&#xff1a;動態分配的內存位于堆中&#xff0c;它不受作用域限制&#xff0c;由程序員控制其生命周期。 棧內存&#xff1a;局部變量和函數參數等自動分配的內存位于棧中&#xff0c;由編譯器自動管理。 2.new…

性能測試(2)

jmeter參數化 loadrunner Jmeter IP欺騙&#xff0c;也稱為IP欺詐&#xff0c;是指通過偽裝、篡改IP地址的方式&#xff0c;進行網絡攻擊或欺騙行為。這種行為可能會導致網絡安全問題&#xff0c;包括身份盜竊、數據泄露、DDoS攻擊等。為了保護自己的網絡安全&#xff0c;用戶…

MySQL-表的約束

文章目錄 一、空屬性二、默認值三、zerofill四、列描述五、主鍵刪除主鍵追加主鍵復合主鍵根據主鍵快速索引 六、自增長last_insert_id() 七、唯一鍵八、外鍵class表&#xff08;主表&#xff09;student表&#xff08;從表&#xff09; 一、空屬性 之前我們將表的機構&#xff…