詳解javascript中的變量提升和函數(shù)提升
1在js中只有兩種作用域
a:全局作用域
b:函數(shù)作用域
在ES6之前,js是沒(méi)有塊級(jí)作用域。
首先來(lái)解釋一下什么是沒(méi)有塊級(jí)作用域?
所以此時(shí) 是可以打印輸出變量a的值。
2:什么是變量提升?
在我們的js中,代碼的執(zhí)行時(shí)分兩步走的,1、解析 2、一步一步執(zhí)行
那么變量提升就是變量聲明會(huì)被提升到作用域的最頂上去,也就是該變量不管是在作用域的哪個(gè)地方聲明的,都會(huì)提升到作作用域的最頂上去。
那么上面這種寫法其實(shí)等價(jià)于下面這種寫法:
看幾個(gè)例子:
把上面的例子稍作改動(dòng):
結(jié)果就會(huì)大不一樣,
再看一個(gè)例子:
3:什么是函數(shù)提升?
輸出的結(jié)果是:
注意:函數(shù)聲明式,會(huì)將函數(shù)的聲明和定義一起提升到作用域的最頂上去。
如果是這種寫法:函數(shù)表達(dá)式聲明的函數(shù)
例子:
輸出的結(jié)果是:
最后的總結(jié):
1:所有的聲明都會(huì)提升到作用域的最頂上去。
2:同一個(gè)變量只會(huì)聲明一次,其他的會(huì)被忽略掉。
3:函數(shù)聲明的優(yōu)先級(jí)高于變量申明的優(yōu)先級(jí),并且函數(shù)聲明和函數(shù)定義的部分一起被提升。
相關(guān)文章
ES6基礎(chǔ)語(yǔ)法之?dāng)?shù)組拓展
這篇文章介紹了ES6基礎(chǔ)語(yǔ)法之?dāng)?shù)組拓展,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05js中escape對(duì)應(yīng)的C#解碼函數(shù) UrlDecode
js中escape對(duì)應(yīng)的C#解碼函數(shù) System.Web.HttpUtility.UrlDecode(s),使用過(guò)程中有以下幾點(diǎn)需要注意2012-12-12Web Inspector:關(guān)于在 Sublime Text 中調(diào)試Js的介紹
本篇文章小編將為大家介紹,Web Inspector:關(guān)于在 Sublime Text 中調(diào)試Js的介紹。需要的朋友可以參考一下2013-04-04JavaScript開(kāi)發(fā)規(guī)范要求(規(guī)范化代碼)
作為一名開(kāi)發(fā)人員(WEB前端JavaScript開(kāi)發(fā)),不規(guī)范的開(kāi)發(fā)不僅使日后代碼維護(hù)變的困難,同時(shí)也不利于團(tuán)隊(duì)的合作,通常還會(huì)帶來(lái)代碼安全以及執(zhí)行效率上的問(wèn)題。2010-08-08window.location.href的用法(動(dòng)態(tài)輸出跳轉(zhuǎn))
無(wú)論在靜態(tài)頁(yè)面還是動(dòng)態(tài)輸出頁(yè)面中window.location.href都是不錯(cuò)的用了跳轉(zhuǎn)的實(shí)現(xiàn)方案2014-08-08