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