JS 的立即執行函式

2022-09-17 19:00:15 字數 1599 閱讀 4504

本文寫於 2019 年 12 月 7 日

其實 es6 之後有了之後,很多之前的用法都沒必要了,立即執行函式就是其一。

今天看到一道面試題:

請「用自己的語言」簡述

立即執行函式是什麼

立即執行函式有什麼用途

我愣了一下,突然發現自己不是很能清晰的解答這個概念。

我只知道()代表了兩種作用:

立即執行函式該怎麼描述呢?

宣告乙個匿名函式,然後馬上呼叫這個匿名函式,就是立即執行函式?

的確,這就是乙個典型的立即執行函式。

首先宣告乙個匿名函式:function()

然後在匿名函式後面接一對括號 (),呼叫這個匿名函式。

那麼為什麼還要用另一對括號把匿名函式包起來呢?

其實是為了相容 js 的語法。

如果我們不加另一對括號,直接寫成:

function()()
瀏覽器會報語法錯誤!

想要通過瀏覽器的語法檢查,必須加點小東西,比如下面幾種

;(function () )()(

// 用括號把整個表示式包起來

function ()

)() //用括號把函式包起來

!(function () )() + // 求反,我們不在意值是多少,只想通過語法檢查。

(function () )() -

(function () )()

~(function () )()

void (function () )()

new (function () )()

目前我也不是很清楚為什麼,但是這些都是實驗證明不會報錯的寫法。(所以大家都說 js 詭異)

立即執行函式有什麼用呢?

只有乙個作用:建立乙個獨立的作用域。

這個作用域裡面的變數,外面訪問不到(即避免「變數汙染」)。

var lilist = ul.getelementsbytagname('li')

for (var i = 0; i < 6; i++)

}

為什麼 alert 的總是 6 呢,因為 i 是貫穿整個作用域的,而不是給每個 li 分配了乙個 i!

怎麼解決這個問題呢?

用立即執行函式給每個 li 創造乙個獨立作用域即可:

var lilist = ul.getelementsbytagname('li')

for (var i = 0; i < 6; i++)

})(i)

}

在立即執行函式執行的時候,i 的值被賦值給 ii,此後 ii 的值一直不變。

i 的值從 0 變化到 5,對應 6 個立即執行函式,這 6 個立即執行函式裡面的 ii 「分別」是 0、1、2、3、4、5。

但是這是用var宣告,如果使用了let,不會出現這種問題!!!!!!

這就是立即執行函式的基本概念。

(完)

js立即執行函式

void function func function param function param param function function function 這些可能在平時寫一些普通指令碼的時候不會用,也不常見,但是當你看別人的原始碼的時候就會發現,特別是一些js的外掛程式時候,是很常見的,初...

js 立即執行函式

先來兩種常見的格式吧 function 形參列表 實參列表 function 形參列表 實參列表 以上兩種都是常見的立即執行函式的形式。那麼,這樣寫的原因是什麼?我們只能這麼去寫嘛?原因是有的,當然也還有別的寫法 立即執行函式其實有這樣的規則 函式表示式 這個括號叫做執行符號。函式宣告包括函式定義和...

js 立即執行函式

立即執行函式其實就是函式的呼叫。形如 function function 要理解函式表示式 函式宣告 以及匿名函式 函式宣告function funname 函式表示式var funname function 呼叫函式的方式都為funname 需要用函式名進行呼叫。匿名函式 function 是沒有...