函式宣告:使用關鍵字function宣告乙個函式,再指定乙個函式名
function
fnname
()
函式表示式:使用關鍵字function宣告乙個函式,但是不指定函式名,將匿名函式賦予乙個變數,叫函式表示式
var fnname = function
()
匿名函式:使用關鍵字function宣告乙個函式,但是不指定函式名,叫匿名函式
function
()
js引擎在解析**時會對函式宣告進行「函式宣告提公升」(function declaration hoisting),而函式表示式則不會提前,必須等到解析到所在行時,才會解析函式表示式:
console.log(fn); // function
fn()
function fn()
console.log(fn); // undefined
varfn = function ()
// 第二個函式相當於:
var fn;
console.log(
fn); // undefined
fn = function ()
函式表示式加括號可以立即執行該函式,函式宣告不可以
function
fnname
()() // 報錯
var fnname = function
() () // 正常執行
要想立即執行,函式必須是函式表示式,不能使函式宣告,而在function前面加上!、()、+、-、=等運算子,都可以將函式宣告轉換成為函式表示式,告訴js引擎這是乙個函式表示式,不是函式宣告,所以可以在後面加括號,並且立即執行函式
(function
(a) )(123)
// 另一種寫法
(function
(a) (123))
用這種寫法可以模仿乙個私有作用域,用匿名函式作為乙個容器,容器內部可以訪問外部變數,外部環境不能訪問容器內部變數
所以( function() )()內部定義的變數不會和外部的變數發生衝突,俗稱「匿名包裹器」或「命名空間」。
var test = 100;
(function
(a) (123));
console.log(x)//undefined
jquery使用的就是這種方法,將jquery**包裹在( function (window,undefined) (window)中,在全域性作用域中呼叫jquery**時,可以達到保護jquery內部變數的作用。 對自執行匿名函式的理解
問題 我一直以來對自執行匿名函式就不是太理解尤其對其寫法 function 感覺很困惑。現在對這種寫法,為什麼這樣寫有了乙個相對清晰的認識。12 en 37816 17 這段 等價於下面這段 en 可以看到,第二段 只是在匿名函式後面直接加上乙個括號,相當於第一段 的test 那麼自執行匿名函式的形...
對自執行函式與閉包的理解
對自執行函式與閉包的理解 function 推薦使用這個 function 但是這個也是可以用的 由於括弧 和js的 異或,逗號等操作符是在函式表示式和函式宣告上消除歧義的 所以一旦解析器知道其中乙個已經是表示式了,其它的也都預設為表示式了 說白的,下邊這三行,因為有了 他們後邊的式子不會再報錯了,...
自執行函式
var a 2 function foo console.log a 2 由於函式被包含在一對 括號內部,因此成為了乙個表示式,通過在末尾加上另外乙個 可以立即執行這個函式,比如 function foo 第乙個 將函式變成表 達式,第二個 執行了這個函式。這種模式很常見,幾年前社群給它規定了乙個術...