在JavaScript中,函數是常常用到的,在實際開發的時候,我想不少人都沒有太在乎函數的聲明與函數表達式的區別,可是呢,這種細節的東西對於學好js是很是重要的。函數
函數聲明與函數表達式用代碼寫出來是這樣的:spa
//函數聲明 function say(){ console.log("函數聲明") } //函數表達式 var say1 = function(){ console.log("函數表達式") }
那咱們來看看,這兩種方式到底有什麼不一樣呢?code
首先,在函數調用方面,看下面的代碼blog
say(); //函數聲明 function say(){ console.log("函數聲明") }
這樣的執行結果是什麼呢?答案是打印出「函數聲明」,那你看下面的代碼ip
say1(); //函數聲明 function say(){ console.log("函數聲明") } //函數表達式 var say1 = function(){ console.log("函數表達式") }
這樣的執行結果是什麼呢?注意,咱們是調用的函數表達式,這樣的結果是會報錯,爲何呢?開發
一塊兒來看看,首先咱們先說第一種,函數聲明的調用,函數聲明的調用這個其實不用講你就知道,函數聲明瞭嘛,哪裏均可以調用的(function會有預解析,預解析以後函數就存在了,因此那裏都能調用它了)。至於下面這種函數表達式,爲何在函數表達式上面執行會報錯呢?來看看下面的代碼io
console.log(a) var a=1;
這段代碼的執行結果是什麼呢?undefined,這是否是很像咱們的函數表達式了,其實,若是說咱們在函數表達式以前也打印一下這個say1(),結果也是undefined,緣由就是帶有var 的變量,固然這裏說的是全局變量,它在預解析的時候會有一個變量提高,變量提高是什麼意思呢,看上面這段代碼,其實就至關於下面這段代碼console
var a; console.log(a); a=1;
如今知道了吧,a這個變量是存在的,而且初始化成了一個undefined,因此說咱們的函數表達式也是同樣的,它也有變量提高,在將函數賦值給你定義的變量以前,調用就會報它不是函數的錯,而打印出來就是undefined,是否是很好理解呢,學到了嗎?function
若是你以爲對你有幫助的話,記得點個關注哦,我會持續更新更多你想知道的,謝謝!class