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

在JavaScript中,函數是經常用到的,在實際開發的時候,我想很多人都沒有太在意函數的聲明與函數表達式的區別,但是呢,這種細節的東西對於學好js是非常重要的。

函數聲明與函數表達式用代碼寫出來是這樣的:


```javascript
//函數聲明
function say(){
    console.log("函數聲明")
}
//函數表達式
var say1 = function(){
    console.log("函數表達式")
}

那我們來看看,這兩種方式到底有什麼不同呢?

首先,在函數調用方面,看下面的代碼

say();
//函數聲明
function say(){
    console.log("函數聲明")
}

這樣的執行結果是什麼呢?答案是打印出“函數聲明”,那你看下面的代碼

```javascript
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,是不是很好理解呢,學到了嗎?

如果你覺得對你有幫助的話,記得點個關注哦,我會持續更新更多你想知道的,謝謝!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章