首頁 web前端 js教程 JavaScript中函數宣告與函數表達式

JavaScript中函數宣告與函數表達式

May 16, 2016 pm 03:57 PM

目前為止,我們一直沒有對函數宣告和函數表達式加以區別。而實際上,解析器在向執行環境中載入資料時,對函數宣告和函數表達式並非一視同仁。解析器會率先讀取函數聲明,並使其在執行任何程式碼之前可用(可以存取);至於函數表達式,則必須等到解析器執行到它所在的程式碼行,才會真正被解釋執行。如下例:

程式碼如下:

alert(sum(10,10));
function sum(num1,num2)
{
    return num1+num2;
}
登入後複製

以上程式碼完全可以正確執行,因為在程式碼開始執行之前,解析器就已經透過一個名為函數宣告提升(function declaration hoisting)的過程,讀取並將函數宣告新增至執行環境。將程式碼求值時,JavaScript引擎在第一遍會宣告函數並將它們放到原始碼樹的頂部。所以,即使宣告函數的程式碼在呼叫它的程式碼後面,JavaScript引擎也能把函數宣告提升到頂部。如果像下面的例子所示,把上面的函數宣告改為等價的函數表達式,就會在執行的時候出現錯誤。

程式碼如下:

alert(sum(10,10));
var sum=function(num1,num2)
{
    return num1+num2;
};
登入後複製

以上程式碼會在運作的時候出現錯誤,原因在於函數位於一個初始化語句中,而不是一個函數聲明。換句話說,在執行到函數所在的語句之前,變數sum中不會保存有對函數的參考;而且,由於第一行程式碼就會導致「unexpected identifier」(意外標識符)錯誤,實際上也不會執行到下一行。

 

 

除了宣告時候可以透過變數存取函數這一點區別之外,文法函數宣告與函數表達式的語法函數其實是等價的。

註:也可以同時呼叫函數宣告和函數表達式,例如 var sum=function sum(){}。不過,這種語法在Safari中會導致錯誤。

以上所述就是本文的全部內容了,希望對大家學習javascript能夠有所幫助。

更多相關教學請造訪 javascript教學

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++ 函數宣告中的預設參數:全面解析其宣告和用法 C++ 函數宣告中的預設參數:全面解析其宣告和用法 May 02, 2024 pm 03:09 PM

C++中的預設參數提供函數參數指定預設值的功能,從而增強程式碼可讀性、簡潔性和靈活性。宣告預設參數:在函數宣告中將參數後面加上"="符號,後面接著預設值。用法:函數呼叫時,若未提供可選參數,則會使用預設值。實戰案例:計算兩個數之和的函數,一個參數必填,另一個可填且有預設值0。優點:增強可讀性、增加彈性、減少樣板程式碼。注意事項:只能在聲明中指定,必須位於末尾,類型必須相容。

C++ 函數的宣告和定義的順序有什麼影響? C++ 函數的宣告和定義的順序有什麼影響? Apr 19, 2024 pm 01:42 PM

在C++中,函數宣告和定義的順序會影響編譯和連結過程。最常見的是聲明在前,定義在後;也可使用「forwarddeclaration」將定義放在聲明前;如果兩者同時存在,編譯器將忽略聲明,僅使用定義。

C++ 函式宣告和定義有什麼差別? C++ 函式宣告和定義有什麼差別? Apr 18, 2024 pm 04:03 PM

函數聲明告知編譯器函數的存在,不包含實現,用於型別檢查。函數定義提供實際實現,包含函數體。區分的關鍵特徵包括:目的、位置、作用。理解差異對於編寫有效且可維護的C++程式碼至關重要。

C++ 函式的宣告與定義 C++ 函式的宣告與定義 Apr 11, 2024 pm 01:27 PM

函數宣告和定義在C++中是必要的,函數宣告指定函數的傳回類型、名稱和參數,而函數定義包含函數體和實作。首先聲明函數,然後在程式中使用它並傳遞所需的參數。使用return語句從函數傳回一個值。

C++編譯錯誤:函式呼叫與函式宣告不符,該怎麼解決? C++編譯錯誤:函式呼叫與函式宣告不符,該怎麼解決? Aug 22, 2023 pm 12:39 PM

C++編譯錯誤:函式呼叫與函式宣告不符,該怎麼解決?在開發C++程式時,難免會遇到一些編譯錯誤,其中一個常見的錯誤是函式呼叫與函式宣告不符的錯誤。這種錯誤廣泛存在於C++程式設計師中,由於不注意函數宣告的正確性,導致編譯問題,最終浪費時間和精力修復問題,影響開發效率。避免這種錯誤的方法需要遵循一些規範和標準實踐,以下讓我們來了解一下。什麼是函數呼叫與函數宣告不

C++ 函數宣告中的[[nodiscard]]:揭開忽略返回值後果的神秘面紗 C++ 函數宣告中的[[nodiscard]]:揭開忽略返回值後果的神秘面紗 May 01, 2024 pm 06:18 PM

[[nodiscard]]屬性指示函數的回傳值不得忽略,否則將導致編譯器警告或錯誤,以防止以下後果:未初始化異常、記憶體洩漏和錯誤的計算結果。

C++ 函式宣告的詳細語法:從語法解析到規範用法解析 C++ 函式宣告的詳細語法:從語法解析到規範用法解析 Apr 30, 2024 pm 02:54 PM

C++函式宣告語法為:returnTypefunctionName(parameterType1parameterName1,...,parameterTypeNparameterNameN);,其中returnType為傳回型別,functionName為函式名,parameterType為參數類型,parameterName為參數名,必須以分號結尾。

C++ 函數宣告的逐步指南:涵蓋每個步驟的詳細說明 C++ 函數宣告的逐步指南:涵蓋每個步驟的詳細說明 May 02, 2024 pm 04:33 PM

函數聲明告訴編譯器函數的存在,無需提供函數體。步驟如下:指定函數傳回類型(void如果無返回值)定義函數名稱聲明函數參數(可選,包括資料類型和識別碼)加分號

See all articles