js中的變數提公升和函式提公升

2021-09-28 00:06:00 字數 1175 閱讀 1570

從上週開始,我所在的學習小組正式開始了angular的學習,angular是全面支援es6的,所以語法上和以前的angular有了很大的不同,比如變數宣告時就拋棄了var,而選擇了let和const;記得剛開始學習js的時候,使用webstrom時用var,webstrom會在下面畫一條小綠線,表示這個用法,問題不大,但是有點問題。因為webstrom推薦使用最新的標準,之後問過學長,他說這是es6的語法,暫時不用管,防止瀏覽器不相容。

終於,現在到了學習es6的時候。

const就是定義乙個常量,即乙個無法改變的量。

而let是乙個更完善的var,以前的var是不完善的,他定義的變數是以函式為範圍,而不是正常程式語言中的以乙個大括號為範圍,比如:

for(var i=0;i<10;i  )

console.log(a); // a

列印a時仍然會列印'a',若是乙個沒接觸過js的人肯定會大吃一驚,這就是乙個最簡單的變數提公升的例子。而let就解決了這個問題。它定義的變數就是塊級的。

上面已經說了乙個變數提公升的最簡單的例子,下面介紹一下為什麼:

通常js引擎會在正式執行之前先進行一次預編譯,在這個過程中,首先將變數宣告及函式宣告提公升至當前作用域的頂端,然後進行接下來的處理
下面來說說函式提公升,同樣的,讓我們先看個例子:

function hoistfunction() 

}hoistfunction();

函式可以在宣告之前就可以呼叫,這是因為引擎是把函式宣告整個地提公升到了當前作用域的頂部,預編譯之後的大概**如下:

function hoistfunction() 

foo(); // output: i am hoisted

}hoistfunction();

變數提公升和函式提公升可以遠比上面那個例子複雜,但對我們意義並不大,畢竟對於變數已經有了完善的let定義方法,而函式提公升,在能不用的情況最好不用,畢竟他是不規範的,學習這個,只是為了以後看到相關**時能夠看懂,否則,看這種**時肯定一臉懵逼。

(另外說一句,函式提公升是專門設計的,有其特殊用途,而變數提公升純粹是設計語言時的失誤,但兩者都應該少用,畢竟都不規範,想要詳細了解,可以點這裡)

更多專業前端知識,請上

【猿2048】www.mk2048.com

js中的變數提公升和函式提公升

一,變數提公升 顧名思義,變數提公升就是函式在執行時,會把在下面的變數提公升到函式的top位置,來看栗子 var scope hello function t t 此時輸出的結果是 第乙個輸出undefined 根據作用域鏈,函式內部訪問乙個變數時,會首先在作用域鏈的前端也就是函式內部尋找變數,找到...

js中的變數提公升和函式提公升

從上週開始,我所在的學習小組正式開始了angular的學習,angular是全面支援es6的,所以語法上和以前的angular有了很大的不同,比如變數宣告時就拋棄了var,而選擇了let和const 記得剛開始學習js的時候,使用webstrom時用var,webstrom會在下面畫一條小綠線,表示...

js中的變數提公升和函式提公升

在js中在宣告變數或者函式時,會將變數或者函式的建立或者初始化放在 最頂端,而賦值過程仍在原地,這就是變數提公升 函式提公升 它並不是物理層面的 移動,而是在編譯時,會先放到記憶體中去。在es6中新增了let和const兩中宣告變數的方式,那麼它們和var相比較到底有什麼區別呢?首先我們先知道兩點 ...