從上週開始,我所在的學習小組正式開始了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相比較到底有什麼區別呢?首先我們先知道兩點 ...