javascript函數篇3、函數聲明提高

變量提高想必你們都比較熟悉了,那麼什麼是函數聲明提高呢?
首先咱們來了解下經常使用的兩種函數定義方式:
1. 函數聲明
2. 函數表達式javascript

下面來看下兩種方式定義函數。
函數聲明語法定義函數java

function fn (n) {
    return n * 2
} 

函數表達式定義函數函數

var fn = function (n) {
    return n * 2
}

*那麼兩種方式定義函數有什麼區別呢?*
**對於函數聲明與函數表達式兩種定義函數的方式,解析器會率先讀取函數聲明,並使其在執行任何代碼以前可用,*這個過程叫函數聲明提高*,而函數表達式則是在真正執行到他所在的代碼行,纔會被解釋執行。**
看下例子就明白了:spa

fn(2)
function fn (n) {
    return n * 2
}

上面的代碼徹底能夠正常運行,由於在代碼開始執行以前,解析器已經進行了函數聲明提高,將函數聲明添加到執行環境中。
相反下面的代碼則會報錯:對象

fn(2)
var fn = function (n) {
    return n * 2
}

由於,函數聲明位於一個賦值語句中,實際上,這裏進行的是**變量提高**,也就是變量fn被提高到頂部,但並未被初始化爲函數對象,在執行fn(2)的時候,fn變量爲undefined,代碼執行到這裏就會報錯,不會繼續往下執行了。blog


總結:
函數聲明提高指,當用函數聲明語法定義函數時,解析器會在代碼執行以前讀取並將函數聲明添加到執行環境,使其在執行任何代碼以前可用。ip

相關文章
相關標籤/搜索