函式宣告與表示式的區別
阿新 • • 發佈:2022-05-04
HTML5學堂:函式有不同的定義方法,一種是函式宣告,另一種是函式表示式,那麼這兩種有何區別呢?
函式宣告的基本語法
function functionName(arg0, arg1, ..., argn) {
// 函式體 - HTML5學堂
}
函式宣告的重要特徵:函式宣告提升
在執行程式碼之前,會先讀取函式宣告,這也就意味著,可以把函式宣告放在呼叫它的語句的後面。
函式表示式的常見語法形式
var functionName = function(arg0, arg1, ..., argn) {
// 函式體 - HTML5學堂
};
如何理解上面這段程式碼呢?建立一個匿名函式(也叫拉達姆函式),並將整個函式賦值給變數functionName
在執行這句程式碼之前,是不能夠實現functionName()函式的呼叫的,函式表示式和其他表示式一樣,都需要在使用前賦值。
經典案例
此段程式碼合法
var say;
if(conditions) {
say = function () { console.log('函式表示式-程式碼合法'); }
} else {
say = function () { console.log('H5course'); }
}
此段程式碼不合法
if(conditions) { function say() { console.log('函式宣告-不合法程式碼'); } } else { function say() { console.log('HTML5學堂'); } }
拓展性知識
在使用函式宣告建立函式時,對於非IE瀏覽器,會為函式定義一個非標準的name屬性,可以通過name屬性訪問到給函式指定的名字。而採用函式表示式所定義的函式,name屬性為空字串。如下:
function h5course() {};
console.log(h5course.name);
var h5 = function(){};
console.log(h5.name);
此段程式碼中,前者會列印h5course,但是後者只會輸出空字串
寫在最後的一些話:關於此方面知識的理解,會涉及到“預編譯與執行”,想了解此方面知識的童鞋可以檢視——>《JavaScript 執行機制之執行順序詳解》
HTML5學堂小編-利利。耗時:1.5h