立即執行函式表示式,大部分人也稱為自執行函式。
匿名函式
(function())()
具名函式(function log())()
自執行函式的傳參(function add(a, b))(1,2)
返回值let fn = (function add(a,b))(2,4);
console.log(fn)
自執行函式也可以傳遞函式作為引數var a = 2;
(function log(fn))(function fn(global));
function add(a, b)
add(1,2);
有些時候我們要實現需求,為了實現這些業務邏輯,為了不讓變數汙染全域性環境,定義了函式,但是這些函式,卻不是等待呼叫的,程式一啟動,那些函式也跟著執行,但像上面的**,儘管函式裡面的變數是沒有汙染全域性,但add
這個函式名變數,卻還是汙染了全域性,有點不美,所以使用立即執行函式表示式就能解決這種情況。
(function add(a, b))(1,2)
雖說j**ascript
的分號是可有可無的,但有些時候還是必要的。
console.log(5)
(function add(a, b))(1,2)
上面**會報錯,因為j**ascript
確實是有分號這個規則的,代表著語句的結束。
這種時候加個分號就行了
console.log(5);
(function add(a, b))(1,2)
但是很多時候我們已經習慣不加分號了,顯得比較麻煩,這種時候就要知道,什麼情況下該加分號。
只要語句開頭是括號,方括號,正則開頭的斜槓,加號,減號的情況下,在前面加分號就行了,當然也可以加別的符號,比如感嘆號,不過一般都是加分號
console.log(5)
;(function add(a, b))(1,2)
!(function add(a, b))(3,2)
var a = 5
var obj = (),
c: 4
}
var a = 5
var obj = (),
c: 4
}
以上兩種都可以,但需要注意的是物件裡的立即執行表示式改變了原本this
的指向,這時的this
是window
var a = 5
var obj = ,
c: 4
}obj.b()
這種時候,this
是指向obj
IIFE 立即執行函式表示式
原文 iife 的原理,我簡單說一下 function foo 這是定義,declaration 定義只是讓直譯器知道其存在,但是不會執行。foo 這是語句,statement 直譯器遇到語句是會執行它的。iife 並非必須,傳統一點可以這麼寫 function foo foo 那麼為什麼要 iif...
立即執行函式表示式IIFE
一 iife解釋 全拼imdiately invoked function expression,立即執行的函式表示式。像如下的 所示,就是乙個匿名立即執行函式 function window,undefined window 二 括號的意義 2.1 包住function 的括號的意義 這個括號的目...
function ,自執行函式表示式
如題為自執行函式表示式。在這種情況下,解析器在解析function關鍵字的時候,會將相應的 解析成function表示式,而不是function宣告。下面2個括弧 都會立即執行 function 推薦使用這個 function 但是這個也是可以用的 由於括弧 和js的 異或,逗號等操作符是在函式表示...