深入理解js中的立即執(zhí)行函數(shù)(function(){....})

第一步:

區(qū)分:函數(shù)聲明 / 函數(shù)表達(dá)式 / 匿名函數(shù)

函數(shù)聲明: 格式: function 函數(shù)名稱(){....};

使用function關(guān)鍵字聲明一個(gè)函數(shù),并指定一個(gè)函數(shù)名稱,叫做函數(shù)聲明;

函數(shù)表達(dá)式: 格式: var 函數(shù)名稱=function(){....};

使用function關(guān)鍵字聲明一個(gè)函數(shù),但未給函數(shù)命名,最后將函數(shù)賦予一個(gè)變量,叫做函數(shù)表達(dá)式;

匿名函數(shù):格式:function(){...};

使用function關(guān)鍵字聲明一個(gè)函數(shù),但沒有函數(shù)名稱,也沒賦予一個(gè)變量

函數(shù)聲明和函數(shù)表達(dá)式的不同之處:

一.JavaScript引擎在解析JavaScript代碼時(shí)會"函數(shù)聲明提升"當(dāng)前執(zhí)行環(huán)境(作用域)上的函數(shù)聲明,而函數(shù)表達(dá)式必須等到JavaScript引擎執(zhí)行到它時(shí),才會從上而下一行一行地解析函數(shù)表達(dá)式

二.函數(shù)表達(dá)式后面可以加括號立即調(diào)用該函數(shù),函數(shù)聲明只能以"函數(shù)名稱 ()"的形式調(diào)用

//函數(shù)聲明
        aa();
        function aa()
        {
            alert("1111");
        }
    //輸出1111

//函數(shù)表達(dá)式:
        aa();
        var aa=function()
        {
            alert("222222");
        }
    //報(bào)錯(cuò)  aa不是一個(gè)函數(shù)
//匿名函數(shù)
    function()
        {
            alert("3333");
        }
//報(bào)錯(cuò)

第二步

理解原理:(函數(shù)表達(dá)式)(); 第一個(gè)括號里必須是函數(shù)表達(dá)式,第二個(gè)括號里傳遞參數(shù);

第一種寫法(匿名函數(shù)(也屬于函數(shù)表達(dá)式)):

(function(a){
            alert(a);
        })(123)

第二種寫法(函數(shù)表達(dá)式):

(function(a){
            alert(a);
        }(123))

總結(jié):##

JavaScript中沒有私有域的概念,所以根據(jù)JavaScript函數(shù)作用域鏈的特性,可以使用這種技術(shù)模擬私有作用域,用匿名函數(shù)作為"容器","容器"內(nèi)可以訪問外部的變量,而外部環(huán)境不能訪問"容器"內(nèi)的變量

參照原文:深入理解javascript中的立即執(zhí)行函數(shù)(function(){…})()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容