摘要:函數表達式不是以關鍵詞開始一般出現在代碼的中間部分五函數聲明提升六函數聲明優先級較高函數聲明比變量聲明的優先級高。如果兩者同名,并且同時存在,后被提升的函數聲明會覆蓋先被提升的變量聲明。閱讀更多參考文章詳解函數聲明和函數表達式的區別
一、變量聲明 1.1 var
最常見的變量聲明方法,在關鍵詞 var 后面緊跟一個變量名(也稱之為變量的標識符)。1.2 undefined
(1)如上定義了一個名為test的變量,但未給這個變量進行初始化(也就是沒有賦值),此時其默認初始化值為 undefined。
二、變量聲明提升 2.1 hoisting(1)由于變量聲明(以及其他聲明)總是在任意代碼執行之前處理,所以在代碼中的任意位置聲明變量總是等效于在代碼開頭聲明。
(2)這意味著變量可以在聲明之前使用,這個行為叫做“hoisting”。“hoisting”就像是把所有的變量聲明移動到函數或者全局代碼的開頭位置。
(3)因此,建議始終在作用域頂部聲明變量(全局代碼的頂部和函數代碼的頂部),這可以清楚知道哪些變量是函數作用域(本地),哪些變量在作用域鏈上解決。
(4)重要的是,提升將影響變量聲明,而不會影響其值的初始化。當到達賦值語句時,該值將確實被分配。
三、函數聲明 3.1 概念函數聲明通過關鍵詞 function 來聲明,關鍵詞后面緊跟的是函數的名稱,名稱后面有一個小括號(()),括號里面放置了函數的參數(para1,...,paramN)和一對大括號{...},函數的代碼塊就放在這個大括號內。3.2 示例
(1)function isEven(num) {...}是一個函數聲明,定義了一個isEven函數。用來判斷一個數是不是偶數。
四、函數表達式區分函數聲明和函數表達式的規則:函數聲明總是以function關鍵詞開始,如果不是,那它就是一個函數表達式。
(1)函數表達式不是以function關鍵詞開始(一般出現在代碼的中間部分)
五、函數聲明提升 六、函數聲明優先級較高(1)函數聲明比變量聲明的優先級高。
(2)如果兩者同名,并且同時存在,后被提升的函數聲明會覆蓋先被提升的變量聲明。
閱讀更多
參考文章 詳解Javascript 函數聲明和函數表達式的區別
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94927.html
摘要:輸出的結果為輸出的結果為提升后輸出的結果為重新定義了變量輸出的結果為如果定義了相同的函數變量聲明,后定義的聲明會覆蓋掉先前的聲明,看如下代碼輸出練習的值是多少的值是多少第二題的解析請看這里參考資料文章文章中文版鏈接文章推薦文章變量提升 JavaScript 變量聲明提升 原文鏈接 一個小例子 先來看個例子: console.log(a); // undefined var a =...
摘要:不同的是函數體并不會再被提升至函數作用域頭部,而僅會被提升到塊級作用域頭部避免全局變量在計算機編程中,全局變量指的是在所有作用域中都能訪問的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現代 JavaScript 開發:語法基礎與實踐技巧系列文章。本文詳細討論了 JavaScript 中作用域、執行上下文、不同作用域下變量提升與函數提升的表現、頂層對象以及如何避免創建...
摘要:函數和變量相比,會被優先提升。這意味著函數會被提升到更靠前的位置。僅提升聲明,而不提升初始化。 JavaScript 函數高級——執行上下文與執行上下文棧(圖解+典型實例分析) 變量提升與函數提升 變量聲明提升 通過 var 定義(聲明)的變量,在定義語句之前就可以訪問到 值:undefined /* 面試題 : 輸出 undefined */ var a = 3 ...
摘要:變量提升什么是變量提升在函數體內聲明的變量,無論你是在函數的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數的最頂端相當于第一行,但是只是提升變量的聲明,不會賦值。 1、變量提升 什么是變量提升?在函數體內聲明的變量,無論你是在函數的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數的最頂端(相當于第一行),但是只是提升變量的聲明,不會賦值。 var num = 10; fu...
摘要:但是碰到聲明提升,這種想法就會被打破。聲明一個函數進行相應的操作,會得到函數聲明提升的結果。由此可以發現變量和函數的聲明都會被提升在其他代碼的前面執行。一個普通塊內部的函數聲明通常會被提升到所在的作用域的頂部。的創建初始化和賦值均會被提升。 Javascript聲明提升 在分析聲明提升之前,我認為有必要知道的兩點: 一、引擎查詢變量的兩種方式 引擎查詢變量的方式可以分為LHS和RHS兩...
摘要:代碼在執行時并不完全是由上到下一行一行執行的,由此產生了一個提升的問題。第二個賦值聲明會被留在原地等待執行階段。可以得知函數聲明提升的優先權大于普通變量聲明。 JavaScript代碼在執行時并不完全是由上到下一行一行執行的,由此產生了一個提升的問題。 什么是提升 可以簡單理解為:聲明(變量和函數)都會被移動到各自作用域的最頂端,這個過程被稱為提升。 具體例子看提升 下面兩個例子a會l...
閱讀 2089·2021-11-23 09:51
閱讀 3697·2021-10-20 13:49
閱讀 1706·2021-09-06 15:13
閱讀 1816·2021-09-06 15:02
閱讀 3154·2021-09-02 15:11
閱讀 890·2019-08-29 15:37
閱讀 1732·2019-08-29 13:24
閱讀 2274·2019-08-29 11:28