在JavaScript中,函數是經常用到的,在實際開發的時候,我想很多人都沒有太在意函數的聲明與函數表達式的區別,但是呢,這種細節的東西對於學好js是非常重要的。 函數聲明與函數表達式用代碼寫出來是這樣的: //函數聲明 function say(){ console.log("函數聲明") } / ...
在JavaScript中,函數是經常用到的,在實際開發的時候,我想很多人都沒有太在意函數的聲明與函數表達式的區別,但是呢,這種細節的東西對於學好js是非常重要的。
函數聲明與函數表達式用代碼寫出來是這樣的:
//函數聲明
function say(){
console.log("函數聲明")
}
//函數表達式
var say1 = function(){
console.log("函數表達式")
}
那我們來看看,這兩種方式到底有什麼不同呢?
首先,在函數調用方面,看下麵的代碼
say();
//函數聲明
function say(){
console.log("函數聲明")
}
這樣的執行結果是什麼呢?答案是列印出“函數聲明”,那你看下麵的代碼
say1();
//函數聲明
function say(){
console.log("函數聲明")
}
//函數表達式
var say1 = function(){
console.log("函數表達式")
}
這樣的執行結果是什麼呢?註意,我們是調用的函數表達式,這樣的結果是會報錯,為什麼呢?
一起來看看,首先我們先說第一種,函數聲明的調用,函數聲明的調用這個其實不用講你就知道,函數聲明瞭嘛,哪裡都可以調用的(function會有預解析,預解析之後函數就存在了,所以那裡都能調用它了)。至於下麵這種函數表達式,為什麼在函數表達式上面執行會報錯呢?來看看下麵的代碼
console.log(a)
var a=1;
這段代碼的執行結果是什麼呢?undefined,這是不是很像我們的函數表達式了,其實,如果說我們在函數表達式之前也列印一下這個say1(),結果也是undefined,原因就是帶有var 的變數,當然這裡說的是全局變數,它在預解析的時候會有一個變數提升,變數提升是什麼意思呢,看上面這段代碼,其實就相當於下麵這段代碼
var a;
console.log(a);
a=1;
現在知道了吧,a這個變數是存在的,並且初始化成了一個undefined,所以說我們的函數表達式也是一樣的,它也有變數提升,在將函數賦值給你定義的變數之前,調用就會報它不是函數的錯,而列印出來就是undefined,是不是很好理解呢,學到了嗎?
如果你覺得對你有幫助的話,記得點個關註哦,我會持續更新更多你想知道的,謝謝!
微信搜索:全棧學習筆記
微信公眾號