js-函式表示式和函式宣告的區別
阿新 • • 發佈:2018-12-18
1.函式宣告
函式宣告以function關鍵字開頭,接著是必須的函式(變數)名和以逗號分隔的可選的引數列表,再接著就是以大括號封裝的函式體。函式宣告必須是一個單獨的JavaScript語句。必須含有函式名
2.函式表示式
在任何情況下都是其它JavaScript語句的一部分(比如賦值表示式等號的右側、函式的引數)的函式被稱為函式表示式。直接可以運算,函式表示式是直接可以被執行符號執行的
3.函式表示式與函式宣告的比較
函式宣告中函式名是必須的;(因為呼叫時是通過函式名來呼叫)
函式表示式中則是可選的;(比如函式表示式中可以將函式表示式賦給一個變數,通過變數名來訪問)
函式宣告放在任意位置都可以被呼叫;函式表示式,解析器只有在讀到函式表示式所在那行的時候才執行
使用函式表示式的話,只有變數宣告提升了——變數的初始化程式碼仍然在原來的位置。
使用函式宣告的話,函式名稱和函式體都提升了,指令碼中所有函式和函式中所有巢狀的函式都會在當前上下文中其他程式碼之前宣告。也就是說,可以在函式宣告之前呼叫它
舉例:
function fun(){ //函式宣告
console.log("hello");
}
// var fun2 = function(){ //函式表示式
// console.log("world");
// }
// fun()
// fun2()
在函式的前面可以加上+-!可以讓函式宣告變成函式表示式
+function fun(){ //立即執行函式 // console.log("hello") // }()
函式聲明瞭以後直接自己執行,用函式的返回值,適合做初始化的工作;
立即執行函式相關介紹:
格式:
(1)(function() {})();
(2)( function() {}() );
注意:在寫立即執行函式時,如果前面有js程式碼,則他們的分號必須都加上,否則會報錯。
varabc = "helloworld" // 報錯:Uncaught TypeError: "helloworld" is not a function
//正確寫法是在函式前面或者上一句js程式碼後加上分號; (function(){ console.log(456) })()