淺談JavaScript中變量和函數(shù)聲明的提升
現(xiàn)象:
1. 在JavaScript中變量和函數(shù)的聲明會(huì)提升到最頂部執(zhí)行。
2. 函數(shù)的提升高于變量的提升。
3. 函數(shù)內(nèi)部如果用var聲明了相同名稱的外部變量,函數(shù)將不再向上尋找。
4. 匿名函數(shù)不會(huì)提升。
5. 不同<script>塊中的函數(shù)互不影響。
例子:
函數(shù)聲明提升高于變量聲明
//同時(shí)聲明變量a和函數(shù)a var a; function a() {} alert(typeof a); //顯示的是"function",初步證明function的優(yōu)先級(jí)高于var。 //先聲明函數(shù)后聲明變量,證明上邊的例子不是function覆蓋了變量 function a() {} var a; alert(typeof a); //顯示的仍是"function",而不是"undefined",即function的優(yōu)先級(jí)高于var。 //聲明了變量的同時(shí)賦值 function a() {} var a = 1; alert(typeof a); //number,此時(shí)不是function了。 //說明:"var a=1"相當(dāng)于"var a;a=1",即先聲明,后賦值,"a=1"相當(dāng)于把a(bǔ)重新賦值了,自然就是number!
函數(shù)內(nèi)部用var定義了和外部相同的變量,函數(shù)將不再向上找外部的變量
var value = 'hello'; function show() { alert(value); if (!value) { var value = 'function'; } alert(value); } show() //此處調(diào)用函數(shù)依次彈出 "undefined", "function" //上例相當(dāng)于var value = 'hello'; function show() { var value; //注意這行 alert(value); if (!value) { value = 'function'; //這行去掉var } alert(value); } show()//1.如果上列中show內(nèi)部定義value未用var,則會(huì)用到外部的變量,彈出"hello", "hello"。 //2.如果函數(shù)內(nèi)部未定義value,也能獲取到外部的value值。
匿名函數(shù)不會(huì)向上提升
getName() var getName = function () { alert('closule') } function getName() { alert('function') } getName() //上邊的代碼相當(dāng)于 function getName() { //函數(shù)向上提升 alert('function') } getName() var getName = function () { alert('closule') } getName() //代碼執(zhí)行分別彈出 "function", "closule"
不同<script>塊中的函數(shù)互不影響
<script> getName() var getName = function () { alert('closule') } <script> <script> function getName() { alert('function') } <script> //代碼執(zhí)行報(bào)錯(cuò):TypeError: getName is not a function //因?yàn)榈谝粋€(gè)<script>塊中g(shù)etName()函數(shù)未定義,匿名函數(shù)又不會(huì)向上提升
以上這篇淺談JavaScript中變量和函數(shù)聲明的提升就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Javascript如何判斷數(shù)據(jù)類型和數(shù)組類型
這篇文章主要介紹Javascript如何判斷數(shù)據(jù)類型和數(shù)組類型,通俗易懂,需要的朋友可以參考下。2016-06-06js實(shí)現(xiàn)最短的XML格式化工具實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)最短的XML格式化工具,實(shí)例分析了基于jquery-latest.js實(shí)現(xiàn)XML代碼格式化的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03原生js實(shí)現(xiàn)表格翻頁和跳轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)表格翻頁和跳轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09通過掃小程序碼實(shí)現(xiàn)網(wǎng)站登陸功能
這篇文章主要介紹了通過掃小程序碼實(shí)現(xiàn)網(wǎng)站登陸功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表各種操作詳解
數(shù)據(jù)結(jié)構(gòu)是一種有效處理大量數(shù)據(jù)的手段,了解它的結(jié)構(gòu)和組成為我們提供了更有效的工具來設(shè)計(jì)與某些問題相關(guān)的產(chǎn)品。這次我們將進(jìn)行鏈表介紹,回顧它的特點(diǎn)和用途2022-10-10js 獲取網(wǎng)絡(luò)圖片的高度和寬度的實(shí)現(xiàn)方法(變通了下)
簡單地說就是把圖片放入一個(gè)自動(dòng)伸縮的DIV中,然后獲取DIV的寬和高!這個(gè)不錯(cuò)的變通,大家可以參考下。2009-10-10layui動(dòng)態(tài)表頭的實(shí)現(xiàn)代碼
這篇文章主要介紹了layui動(dòng)態(tài)表頭的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08