JavaScript(js)函數聲明與函數表達式的區別

在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

相關文章
相關標籤/搜索