js的函數宣告和函數表達式的分析
這篇文章主要介紹了關於js的函數宣告和函數表達式的分析,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
1.定義
在javascript中我們定義函數有以下兩種方式:
函數宣告
function say(){ console.log('函数声明'); }
函數表達式
var say = function(){ console.log('函数表达式'); }
2.實例解析
在平時開發中,它們有著難以察覺的差別,我們看下下面的例子:
say(); var say = function(){ console.log('函数表达式'); } say(); function say(){ console.log('函数声明'); } say();
可以先在腦海中想一下答案,執行結果是:
函数声明 函数表达式 函数表达式
來,我們分析這個結果:
1.第一次呼叫say函數時,函數還未被定義,那為什麼可以印出「函數宣告」這個值呢?原因在於
javascript解釋器中存在一種變數宣告被提升的機制,也就是說函數宣告會被提升到作用域的最前面,即使寫程式碼的時候是寫在最後面,也會被提升至最前面。
而用函數表達式創建的函數是在運行時進行賦值,並且要等到表達式賦值完成後才能調用
因此,即使函數還未被定義,但是函數聲明已經被提升到最前面了,上面那段程式碼相當於:
var say; //变量被提升,此时的值为undefined say();// 函数被提升,输出“函数声明” var say = function(){ console.log('函数表达式'); } say(); function say(){ console.log('函数声明'); } say();
從下面兩個的對比,更能理解「函數宣告提升」這個概念:
1.
var say; console.log(say); say(); function say(){ console.log('函数声明'); } 输出: f say(){ console.log('函数声明'); } 函数声明
2.
var say; console.log(say); say(); var say = function(){ console.log('函数表达式'); } 输出: undefined Uncaught TypeError: say is not a function at <anonymous>:3:1
2.第二次呼叫say函數時,我們可以先簡單理解為此時的函數表達式
覆蓋了函數宣告
,因此輸出了'函數表達式',然而到了第三次呼叫say函數時,此時印出來的竟然還是'函數表達式'? ?為什麼後面的函數宣告
沒有覆寫前面的函數表達式
呢?其實在運行時由於函數宣告提升的原因,實際上運行的順序是類似於這樣的:
function say() { console.log('函数声明'); }//因为函数声明提升,所以在最前面运行了 say(); var say = function() { console.log('函数表达式'); } say(); say();
#3.總結
#1.函數宣告`在JS解析時進行函數提升,因此在同一個作用域內,不管函數宣告在哪裡定義,函數都可以進行呼叫。
2.函數表達式的值是在JS運行時確定,並且在表達式賦值完成後,該函數才能調用
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
以上是js的函數宣告和函數表達式的分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

Go語言提供了兩種動態函數創建技術:closures和反射。 closures允許存取閉包作用域內的變量,而反射可使用FuncOf函數建立新函數。這些技術在自訂HTTP路由器、實現高度可自訂的系統和建置可插拔的元件方面非常有用。

在C++函數命名中,考慮參數順序至關重要,可提高可讀性、減少錯誤並促進重構。常見的參數順序約定包括:動作-物件、物件-動作、語意意義和遵循標準函式庫。最佳順序取決於函數目的、參數類型、潛在混淆和語言慣例。

1. SUM函數,用於對一列或一組單元格中的數字進行求和,例如:=SUM(A1:J10)。 2、AVERAGE函數,用於計算一列或一組儲存格中的數字的平均值,例如:=AVERAGE(A1:A10)。 3.COUNT函數,用於計算一列或一組單元格中的數字或文字的數量,例如:=COUNT(A1:A10)4、IF函數,用於根據指定的條件進行邏輯判斷,並返回相應的結果。

C++函數中預設參數的優點包括簡化呼叫、增強可讀性、避免錯誤。缺點是限制靈活性、命名限制。可變參數的優點包括無限彈性、動態綁定。缺點包括複雜性更高、隱式型別轉換、除錯困難。

C++中的函數傳回參考類型的好處包括:效能提升:引用傳遞避免了物件複製,從而節省了記憶體和時間。直接修改:呼叫方可以直接修改傳回的參考對象,而無需重新賦值。程式碼簡潔:引用傳遞簡化了程式碼,無需額外的賦值操作。

自訂PHP函數與預定義函數的差異在於:作用域:自訂函數僅限於其定義範圍,而預定義函數可在整個腳本中存取。定義方式:自訂函數使用function關鍵字定義,而預先定義函數則由PHP核心定義。參數傳遞:自訂函數接收參數,而預先定義函數可能不需要參數。擴充性:自訂函數可以根據需要創建,而預定義函數是內建的且無法修改。

C++中的異常處理可透過自訂異常類別增強,提供特定錯誤訊息、上下文資訊以及根據錯誤類型執行自訂操作。定義繼承自std::exception的異常類,提供特定的錯誤訊息。使用throw關鍵字拋出自訂異常。在try-catch區塊中使用dynamic_cast將捕獲到的異常轉換為自訂異常類型。在實戰案例中,open_file函數會拋出FileNotFoundException異常,捕捉並處理該異常可提供更具體的錯誤訊息。
