您的位置:首頁>正文

函式宣告、函數運算式、匿名函數、立即執行函數詳解

定義函數的方式有三種:

1.函式宣告: function 函數名稱 (參數:可選) { 函數體 }

2.函數運算式: var express= function 函數名稱:可選 (參數:可選) { 函數體 }

3.構造函數: var fun =new Function(參數:可選);

最常用的是函式宣告和函數運算式。

推薦下我的前端群:121404239, 不管你是小白還是大牛, 小編我都歡迎, 不定期分享乾貨, 包括我自己整理的一份前端資料和零基礎入門教程, 歡迎初學者和在進階中的小夥伴。

一:函式宣告

從上面的定義可以看出, 函式宣告是以關鍵字function開頭聲明一個函數, 然後必須具備一個函數名稱。

函式宣告有一個非常重要的特徵:函式宣告提升, javascript引擎在解析代碼時, 函式宣告將會被提升到當前作用域的頂部(跟變數提升非常類似)。 正是因為這個特徵, 所以可以把函式宣告放在調用它的語句後面。

如下例:

foo("hello"); //輸出 hello

function foo(name){

console.log(name);

}

二:函數運算式

從上面的定義可以看出, 函數運算式是作為運算式語句的一部分存在;當它沒有函數名稱的時侯,

則稱為匿名函數;

匿名函數:function ( 參數 ) { 函數體 } 匿名函數屬於函數運算式。

函數運算式與函式宣告的區別是:函數運算式必須等到Javascirtp引擎執行到它所在行時, 才會從上而下一行一行地解析函數運算式, 所以, 調用它的語句不可以放在它之前。

如下例:

express(); //報錯, 函式呼叫必須在函數運算式之後

console.log(express); //undefined 變數提升

var express=function () {

console.log("hello word!");

}

三:立即執行函數

先看幾個例子:

var express=function () {

console.log("hello word!");

}(); //運行, 發現函數直接執行, 結果輸出了"hello word!"

function () {

console.log("hello word!");

}(); //報錯 Uncaught SyntaxError: Unexpected token )

因為以function開頭, 認為是函式宣告, 結果沒有函數名, 就報錯了

function foo() {

console.log("hello word!");

}(); //報錯 Uncaught SyntaxError: Unexpected token ) (注意:網上好多文章寫的不報錯, 一看就沒有自己驗證過)

雖然, 這個function在語法上沒問題, 但是依然只是一個語句, 加上括弧依然報錯, 是因為語句中的分組操作符要包含運算式。

綜上, 我們可以得到, 在函數運算式後面緊跟一個小括弧(), 函數會立即執行, 兩大要點是:運算式、括弧();

所以, 立即執行函數的寫法就是:

( function(){…} )() 或 ( function (){…} () )

這裡的括弧是消除歧義的, 它告訴解析器, 裡面的內容是運算式。

作者:lichunchun

原文:http://www.cnblogs.com/lichunyan/p/7894867.html

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示