摘要:殊不知不只有聲明才會(huì)提前,以這種形式聲明的函數(shù),會(huì)被提升到作用域的最最頂部,然后再是變量的提升。具體請(qǐng)看下面例子足以說(shuō)明函數(shù)提升的更兇一些。
今天,又由一到題目引發(fā)了一場(chǎng)我跟JS基礎(chǔ)的較量:首先是
var getName = function(){alert(1)}; function getName(){alert(2)}; getName();// 1
or
function getName(){alert(2)}; var getName = function(){alert(1)}; getName();// 1
為什么我調(diào)換聲明順序,結(jié)果還是輸出以 var 形式聲明的函數(shù)的值?
有人回答我說(shuō) "啊,變量提升呀...",我最開(kāi)始的理解,就算變量提升,第一種情況提升之后,應(yīng)該是這樣?。?/p>
var getName; getName = function(){alert(1)}; function getName(){alert(2)};
最后應(yīng)該輸出 2 才對(duì)啊(很理直氣壯)。
殊不知不只有var聲明才會(huì)提前,以function fn(){}這種形式聲明的函數(shù),會(huì)被提升到作用域的最最頂部,然后再是變量的提升。
具體請(qǐng)看下面例子:
fn();//Uncaught TypeError: fn is not a function var fn = function(){console.log(1)};
but
fn();//2 var fn = function(){console.log(1)}; function fn(){console.log(2)}
足以說(shuō)明函數(shù)提升的更兇一些。
原理:我先去研究一下原理,搞懂了在來(lái)分享
感謝關(guān)注微信公眾號(hào):一線碼農(nóng)
或掃碼關(guān)注:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97672.html
摘要:變量提升什么是變量提升在函數(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...
摘要:不同的是函數(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)建...
摘要:但是碰到聲明提升,這種想法就會(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): 一、引擎查詢變量的兩種方式 引擎查詢變量的方式可以分為L(zhǎng)HS和RHS兩...
摘要:函數(shù)和變量相比,會(huì)被優(yōu)先提升。這意味著函數(shù)會(huì)被提升到更靠前的位置。僅提升聲明,而不提升初始化。 JavaScript 函數(shù)高級(jí)——執(zhí)行上下文與執(zhí)行上下文棧(圖解+典型實(shí)例分析) 變量提升與函數(shù)提升 變量聲明提升 通過(guò) var 定義(聲明)的變量,在定義語(yǔ)句之前就可以訪問(wèn)到 值:undefined /* 面試題 : 輸出 undefined */ var a = 3 ...
摘要:輸出的結(jié)果為輸出的結(jié)果為提升后輸出的結(jié)果為重新定義了變量輸出的結(jié)果為如果定義了相同的函數(shù)變量聲明,后定義的聲明會(huì)覆蓋掉先前的聲明,看如下代碼輸出練習(xí)的值是多少的值是多少第二題的解析請(qǐng)看這里參考資料文章文章中文版鏈接文章推薦文章變量提升 JavaScript 變量聲明提升 原文鏈接 一個(gè)小例子 先來(lái)看個(gè)例子: console.log(a); // undefined var a =...
閱讀 3402·2021-09-22 15:17
閱讀 2754·2021-09-02 15:15
閱讀 1785·2019-08-30 15:54
閱讀 2013·2019-08-30 14:02
閱讀 2540·2019-08-29 16:58
閱讀 3000·2019-08-29 16:08
閱讀 1343·2019-08-26 12:24
閱讀 1668·2019-08-26 10:41