摘要:變量提升什么是變量提升在函數體內聲明的變量,無論你是在函數的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數的最頂端相當于第一行,但是只是提升變量的聲明,不會賦值。
1、變量提升
什么是變量提升?
在函數體內聲明的變量,無論你是在函數的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數的最頂端(相當于第一行),但是只是提升變量的聲明,不會賦值。
var num = 10; fun(); //輸出結果為undefined function fun(){ console.log(num); var num = 20; } /*上面這個函數相當于: function fun(){ var num; console.log(num); num = 20; } */2、函數提升
什么是函數提升?
在JavaScript中以函數聲明的方式創建的函數就跟用var創建的變量一樣,它們的聲明都會提前聲明,這就使得我們在JavaScript中可以調用函數在前面,而聲明函數在后面,這就是函數提升。
func(); function func(){ alert(“函數執行了!”); } /* 上面這段代碼相當于: function func(){ alert(“函數執行了!”); } func(); */3、函數與變量同名時的變量提升
alert(fun); // 最終輸出結果為:輸出fun函數體 function fun(){ alert(“我是一個函數”); } var fun = “我是一個變量”; alert(fun); // 輸出:我是一個變量 /* 為什么第一個alert輸出的是fun函數體,而第二個alert輸出的是“我是一個變量”? 因為用var聲明的變量及function聲明的函數在執行前都會將聲明提升到最前面,如果變量與函數同名, 那么在聲明的時候會忽略變量,只提升函數聲明! */ /* 上面這段代碼相當于: function fun(){ alert(“我是一個函數”); } alert(fun); fun = “我是一個變量”; alert(fun); */4、變量搜索原則(變量訪問原則)
在JavaScript中變量的訪問(搜索)是有原則的:
1)、首先在訪問變量的作用域(函數)中查找該變量,如果找到直接使用 2)、如果沒有找到,去上一級作用域中查找,如果找到直接使用 3)、如果還是沒有找到,則再去上一級作用域中查找,知道全局作用域 4)、如果找到了就直接使用,如果沒有找到則報錯
var num = 123; function foo1(){ function foo2(){ console.log(num); } /*當調用foo2時,會首先去foo2這個作用域中查找是否有num變量,結果沒找到則去上一級作用域(即foo1)中查找是否有foo1變量, 結果還 是沒找到,則再去上一級作用域(全局作用域)中查找,結果找到了,則拿來使用*/ foo2(); }5、變量提升、變量搜索機制經典面試題
fun(); console.log(b); console.log(c); console.log(a); functoin fun(){ var a = b = c = 9; console.log(a); console.log(b); console.log(c); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100695.html
摘要:編譯原理在傳統編譯語言的流程中,程序中的一段源代碼在執行之前會經歷三個步驟,統稱為編譯。定義聲明是在編譯階段進行的,而賦值是在執行階段進行的。 編譯原理 在傳統編譯語言的流程中,程序中的一段源代碼在執行之前會經歷三個步驟,統稱為編譯。 詞法分析將由字符組成的字符串分解成(對編程語言來說)有意義的代碼塊,這些代碼塊被稱為詞法單元(token)。 語法分析這個過程是將詞法單元流(數組)轉...
摘要:關于本書,我會寫好幾篇讀書筆記用以記錄那些讓我恍然大悟的瞬間,本文是第一篇弄懂的作用域和閉包。作用域也可以看做是一套依據名稱查找變量的規則。聲明實際上是根據你傳遞給它的對象憑空創建了一個全新的詞法作用域。 《你不知道的JavaScript》真的是一本好書,閱讀這本書,我有多次哦,原來是這樣的感覺,以前自以為理解了(其實并非真的理解)的概念,這一次真的理解得更加透徹了。關于本書,我會寫好...
摘要:不同的是函數體并不會再被提升至函數作用域頭部,而僅會被提升到塊級作用域頭部避免全局變量在計算機編程中,全局變量指的是在所有作用域中都能訪問的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現代 JavaScript 開發:語法基礎與實踐技巧系列文章。本文詳細討論了 JavaScript 中作用域、執行上下文、不同作用域下變量提升與函數提升的表現、頂層對象以及如何避免創建...
摘要:作用域分類作用域共有兩種主要的工作模型。換句話說,作用域鏈是基于調用棧的,而不是代碼中的作用域嵌套。詞法作用域詞法作用域中,又可分為全局作用域,函數作用域和塊級作用域。 一篇鞏固基礎的文章,也可能是一系列的文章,梳理知識的遺漏點,同時也探究很多理所當然的事情背后的原理。 為什么探究基礎?因為你不去面試你就不知道基礎有多重要,或者是說當你的工作經歷沒有亮點的時候,基礎就是檢驗你好壞的一項...
摘要:也毫不例外,但在中作用域的特性與其他高級語言稍有不同,這是很多學習者久久難以理清的一個核心知識點。主要使用的是函數作用域。 關于作用域:About Scope 作用域是程序設計里的基礎特性,是作用域使得程序運行時可以使用變量存儲值、記錄和改變程序的狀態。JavaScript 也毫不例外,但在 JavaScript 中作用域的特性與其他高級語言稍有不同,這是很多學習者久久難以理清的一個核...
閱讀 1093·2021-10-12 10:11
閱讀 877·2019-08-30 15:53
閱讀 2286·2019-08-30 14:15
閱讀 2961·2019-08-30 14:09
閱讀 1197·2019-08-29 17:24
閱讀 972·2019-08-26 18:27
閱讀 1283·2019-08-26 11:57
閱讀 2146·2019-08-23 18:23