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