成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript-立即調(diào)用函數(shù)表達式(IIFE)

XUI / 2568人閱讀

摘要:將匿名函數(shù)賦予一個變量,叫函數(shù)表達式,這是最常見的函數(shù)表達式語法形式。組成這是一個被稱為自執(zhí)行匿名函數(shù)的設(shè)計模式,主要包含兩部分。

一、函數(shù)聲明&函數(shù)表達式 1.1 函數(shù)聲明 (函數(shù)語句)

(1)使用 function 關(guān)鍵字聲明一個函數(shù),再指定一個函數(shù)名,叫函數(shù)聲明。

(2)【注意】JavaScript引擎規(guī)定,如果function關(guān)鍵字出現(xiàn)在行首,一律解釋成函數(shù)聲明語句

1.2 函數(shù)表達式 (function expression)

(1)使用 function 關(guān)鍵字聲明一個函數(shù),函數(shù)名稱可被省略,此種情況下的函數(shù)是 匿名函數(shù)(anonymous)。 函數(shù)名稱只是函數(shù)體中的一個本地變量。

(2)將匿名函數(shù)賦予一個變量,叫函數(shù)表達式,這是最常見的函數(shù)表達式語法形式。

1.3 匿名函數(shù)

(1)下面是匿名函數(shù)的一個例子(函數(shù)沒有名字)。

(2)也可以在定義時為函數(shù)命名。

(3)命名函數(shù)表達式的好處是當我們遇到錯誤時,堆棧跟蹤會顯示函數(shù)名,容易尋找錯誤。

(4)可以看到,上面的兩個例子都不以function開頭。不以function開頭的函數(shù)語句就是函數(shù)表達式定義

1.4 IIFE

(1)但有時需要在定義函數(shù)之后,立即調(diào)用該函數(shù)(函數(shù)只使用一次)。這種函數(shù)就叫做立即執(zhí)行函數(shù),全稱為立即調(diào)用函數(shù)表達式IIFE(Imdiately Invoked Function Expression)

二、立即調(diào)用函數(shù)表達式 2.1 概念
立即調(diào)用函數(shù)表達式(IIFE)是一個在定義時就會立即執(zhí)行的  JavaScript 函數(shù)。
2.2 組成

(1)這是一個被稱為 自執(zhí)行匿名函數(shù) 的設(shè)計模式,主要包含兩部分。第一部分是包圍在 圓括號運算符() 里的一個匿名函數(shù)。

(2)第二部分再一次使用 () 創(chuàng)建了一個立即執(zhí)行函數(shù)表達式,JavaScript 引擎到此將直接執(zhí)行函數(shù)。

2.3 寫法

(1)【最常用的兩種辦法】

(2)【其他寫法】

2.4 括號

(1)無論何時,給立即執(zhí)行函數(shù) 加上括號 是個好習慣。

(2)通過以上的介紹,我們大概了解通過()可以使得一個函數(shù)表達式立即執(zhí)行。

(3)有的時候,我們實際上不需要使用()使之變成一個函數(shù)表達式,啥意思?比如下面這行代碼,其實不加上()也不會保錯。

(4)但是我們依然推薦加上()。

(5)為什么?因為我們在閱讀代碼的時候,如果 function 內(nèi)部代碼量龐大,我們不得不滾動到最后去查看 function(){} 后 是否帶有(),用來確定 i 的值,并判斷是 function 還是 function內(nèi)部的返回值。所以為了代碼的可讀性,請盡量加上(),無論是否已經(jīng)是表達式。

2.4 作用

(1)IIFE 中的匿名函數(shù)擁有 獨立的詞法作用域。這不僅避免了外界訪問此 IIFE 中的變量,而且又不會污染全局作用域。(另一種說法 【構(gòu)造一個函數(shù)作用域,防止污染全局變量】)

(2)JavaScript 沒用私有作用域的概念,如果是在多人開發(fā)的項目,你在全局或局部作用域中聲明的變量,可能會被其他人不小心用同名的變量給 覆蓋,根據(jù)JavaScript 函數(shù)作用域鏈的特性,使用這種技術(shù)可以模仿一個私有作用域,匿名函數(shù)作為一個“容器”,“容器”內(nèi)部可以訪問外部的變量,而外部環(huán)境不能訪問“容器”內(nèi)部的變量,所以 ( function(){…} )() 內(nèi)部定義的變量不會和外部的變量發(fā)生沖突,俗稱“匿名包裹器”或“命名空間”。

(3)【注意】將 IIFE 分配給一個變量,不是存儲 IIFE 本身,而是存儲 IIFE 執(zhí)行后返回的結(jié)果。

2.5 示例

接下來用一個需求實現(xiàn)來更直觀地說明IIFE的用途。假設(shè)有一個需求,每次調(diào)用函數(shù),都返回加1的一個數(shù)字(數(shù)字初始值為0)

【1】全局變量

一般情況下,我們會使用全局變量來保存該數(shù)字狀態(tài)

【2】自定義屬性

但上面的方法中,變量a實際上只和add函數(shù)相關(guān),卻聲明為全局變量,不太合適

將變量a更改為函數(shù)的自定義屬性更為恰當

【3】IIFE

其實這樣做,還是有問題。有些代碼可能會無意中將add.count重置

使用IIFE把計數(shù)器變量保存為私有變量更安全,同時也可以減少對全局空間的污染

閱讀更多

參考文章

深入理解JavaScript系列(4):立即調(diào)用的函數(shù)表達式 湯姆大叔

(譯)詳解javascript立即執(zhí)行函數(shù)表達式(IIFE) 韓子遲

深入理解閉包系列第三篇——IIFE 小火柴的藍色理想

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107835.html

相關(guān)文章

  • Javascript知識點:IIFE - 立即調(diào)用函數(shù)

    摘要:所以那些匿名函數(shù)附近使用括號或一些一元運算符的慣用法,就是來引導解析器,指明運算符附近是一個表達式。 Immediately-invoked Function Expression(IIFE,立即調(diào)用函數(shù)),簡單的理解就是定義完成函數(shù)之后立即執(zhí)行。因此有時候也會被稱為自執(zhí)行的匿名函數(shù)(self-executing anonymous function)。 IIFE的叫法最早見于Ben...

    goji 評論0 收藏0
  • [譯] JavaScript立即執(zhí)行函數(shù)達式IIFE

    摘要:而且,如果你想跳過這里,你可以直接跳到立即調(diào)用函數(shù)表達式進行閱讀,但是我建議你讀完整篇文章。當圓括號包裹函數(shù)時,它會默認將函數(shù)作為表達式去解析,而不是函數(shù)聲明。什么是呢它使一個被立即調(diào)用的函數(shù)表達式。一旦命名,函數(shù)將不再匿名。 原文:http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iif...

    546669204 評論0 收藏0
  • 立即執(zhí)行函數(shù)達式(IIFE)

    摘要:另外,如果你想跳過這里,你可以直接跳到立即調(diào)用函數(shù)表達式進行閱讀,但是我建議你讀完整篇文章。當圓括號包裹函數(shù)時,它會默認將函數(shù)作為表達式去解析,而不是函數(shù)聲明。 原文:Immediately-Invoked Function Expression (IIFE) by Ben Alman原譯:立即執(zhí)行函數(shù) by Murphywuwu改增內(nèi)容: by blanu 也許你沒有注意到,我是一個...

    Yu_Huang 評論0 收藏0
  • 講清楚之 javascript 函數(shù)

    摘要:中函數(shù)是一等公民。小明小明調(diào)用函數(shù)時,傳遞給函數(shù)的值被稱為函數(shù)的實參值傳遞,對應(yīng)位置的函數(shù)參數(shù)名叫作形參。所以不推薦使用構(gòu)造函數(shù)創(chuàng)建函數(shù)因為它需要的函數(shù)體作為字符串可能會阻止一些引擎優(yōu)化也會引起瀏覽器資源回收等問題。 函數(shù) 之前幾節(jié)中圍繞著函數(shù)梳理了 this、原型鏈、作用域鏈、閉包等內(nèi)容,這一節(jié)梳理一下函數(shù)本身的一些特點。 javascript 中函數(shù)是一等公民。 并且函數(shù)也是對象,...

    Keagan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<