摘要:我們知道,對于所有的變量,無論在函數(shù)體的什么地方聲明,都會在后臺被提升到函數(shù)體頂部。唯一需要引起注意的地方在于當適用函數(shù)聲明時,函數(shù)定義也會被提升,而不僅僅是函數(shù)聲明被提升。
我們知道,對于所有的變量,無論在函數(shù)體的什么地方聲明,都會在后臺被提升到函數(shù)體頂部。
這個規(guī)則對于函數(shù)同樣適用,其原因在于函數(shù)只是分配給變量的對象。唯一需要引起注意的地方在于當適用函數(shù)聲明時,函數(shù)定義也會被提升,而不僅僅是函數(shù)聲明被提升。看下面的代碼:
function test() { console.log(typeof foo); // "function" console.log(typeof bar); // "undefined" function foo() { } var bar = function () { }; } test();
test()函數(shù)中的foo和bar的聲明被提升到了頂部;同時,需要注意的是:foo和bar的區(qū)別在于前者的定義得到了提升,而后者的定義沒有提升,這也就是console.log(typeof bar)輸出undefined的原因。
所以,需要記住的是:函數(shù)表達式僅僅是變量被提升,而函數(shù)的實現(xiàn)沒有被提升。
上面的代碼中,后臺解析的代碼類似于:
function test() { var bar; function foo() { } console.log(typeof foo); // "function" console.log(typeof bar); // "undefined" var bar = function () { }; } test();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/85712.html
摘要:什么是函數(shù)作用域下的變量提升和函數(shù)提升函數(shù)作用域中也存在變量提升和函數(shù)提升,這個和全局作用域下的情況是一模一樣的,就是把作用域想成是全局的就可以了。 在js中有一部分比較難以理解,卻也是在筆試過程中很容易考的,那就是變量提升和函數(shù)提升的問題,這篇文章我會就變量提升和函數(shù)提升的問題拓展一下有關(guān)js函數(shù)的知識點,包括作用域的問題,后面還會有一些小練習來判斷自己是否真的搞懂了。 作用域 在j...
摘要:函數(shù)提升在里有兩種方式創(chuàng)建函數(shù),通過函數(shù)聲明和函數(shù)表達式。函數(shù)聲明用指定的參數(shù)來定義函數(shù)。提示不要在中進行函數(shù)聲明。問題輸出兩個都是用函數(shù)聲明的函數(shù),將被提升到的局部作用域頂端。函數(shù)本身將作為函數(shù)聲明在全局范圍內(nèi)提升。 作者關(guān)于提升的話題,總共有兩篇。(后來又有一個討論篇),再次搬過來。水平有限,如果翻譯的不準確請包涵,并去看原文。下面開始: 這是我之前的關(guān)于提升的文章,標題為《用le...
摘要:聲明提升變量和函數(shù)聲明提升發(fā)生在預編譯階段。上面代碼,函數(shù)內(nèi)相當于對全局變量進行賦值函數(shù)聲明提升創(chuàng)建函數(shù)有兩種方式,函數(shù)聲明和函數(shù)表達式,只有函數(shù)聲明存在提升。同時聲明變量和函數(shù)顯示的是,初步證明的優(yōu)先級高于。 聲明提升 變量和函數(shù)聲明提升發(fā)生在JavaScript預編譯階段。 所謂的聲明提升,就是說變量或者函數(shù)在聲明的時候會被提前到當前作用域的頂部,已經(jīng)處于可訪問狀態(tài)。 變量聲明提升...
摘要:所謂變量提升,提升就是為了事先聲明變量。變量提升之后,但其賦值還是留在原本的位置等運行到了之后動態(tài)賦值,而函數(shù)提升之后直接相當于在代碼里抽空了。搞明白這個例子也就搞懂了作用域中變量和函數(shù)是怎么提升的。 問題 showImg(https://segmentfault.com/img/bVJ614?w=222&h=165); 在這個例子中它應該輸出什么?輸出的結(jié)果是6。 showImg(h...
摘要:函數(shù)和變量相比,會被優(yōu)先提升。這意味著函數(shù)會被提升到更靠前的位置。僅提升聲明,而不提升初始化。 JavaScript 函數(shù)高級——執(zhí)行上下文與執(zhí)行上下文棧(圖解+典型實例分析) 變量提升與函數(shù)提升 變量聲明提升 通過 var 定義(聲明)的變量,在定義語句之前就可以訪問到 值:undefined /* 面試題 : 輸出 undefined */ var a = 3 ...
摘要:要理解函數(shù)的提升行為,讓我們先解析什么是的提升。也就是說聲明提升了,賦值還留著原地,等待執(zhí)行。聲明被提升,而包括函數(shù)表達式的賦值在內(nèi)的賦值操作并不會提升,而是留在原地等待執(zhí)行。 javaScript自上而下執(zhí)行的順序受到很多新手和部分老手的共識,但是這其實并不完全正確,這涉及到j(luò)s的編譯過程,這方面我們稍后會聊到,先考慮下面代碼: window.onload = function(){...
閱讀 2069·2021-11-16 11:45
閱讀 569·2021-11-04 16:12
閱讀 1369·2021-10-08 10:22
閱讀 840·2021-09-23 11:52
閱讀 4128·2021-09-22 15:47
閱讀 3513·2021-09-22 15:07
閱讀 486·2021-09-03 10:28
閱讀 1730·2021-09-02 15:21