立即執行函式表示式 自執行函式

2022-09-13 08:48:08 字數 1525 閱讀 5824

立即執行函式表示式,大部分人也稱為自執行函式。

匿名函式

(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的指向,這時的thiswindow

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的 異或,逗號等操作符是在函式表示...