国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - 關于Javascript閉包與應用的詳解

關于Javascript閉包與應用的詳解

2022-03-07 16:02Marshal_dj js教程

這篇文章主要介紹了關于Javascript閉包與應用的詳解,文中有非常詳細的代碼示例.對正在學習js的伙伴們有很好的幫助,需要的朋友可以參考下

前言

Javascript閉包在學習過程中一般較難理解,本文從什么是閉包,常見閉包示例,閉包作用,閉包應用及閉包問題等方面來介紹閉包,希望能給大家帶來更深層次的認識,有不恰當之處請指出,謝謝。

一、什么是閉包?

閉包是指一個嵌套的內部(子)函數引用了父函數作用域中數據的函數,這就產生了閉包。

關鍵理解:

1. 產生閉包必須要有嵌套函數
2. 閉包是函數,并是嵌套的內部函數
3. 閉包內部函數必須要引用父函數作用域中數據

如果不滿足以上條件,則不能產生閉包,接下來示例說明。

1.1閉包滿足條件代碼

?
1
2
3
4
5
6
7
8
9
<script>
            function person(){
                var name='marshal';
                function student(){ //聲明子函數
                    console.log(name);//引用父函數作用域的變量name
                }
            }
            person();//函數執行,產生閉包
        </script>     

關于Javascript閉包與應用的詳解

1.2閉包產生時機

?
1
2
3
4
5
6
7
8
9
10
<script>
        function person(){
            var name='marshal';//js執行此行時,產生閉包
            function student(){ //聲明子函數
                console.log(name);//引用父函數作用域的變量name
            }
            student();//內部函數在外部函數調用
        }
        person();//函數執行,雖滿足閉包條件,但未產生閉包
    </script>

關于Javascript閉包與應用的詳解

閉包產生時機:嵌套子函數代碼塊有引用父函數作用域的數據,并該嵌套子函數要執行前,創建上下文時產生閉包。或者簡單說該該嵌套子函數在外部被執行時,此刻產生了閉包。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
            function person(){
                var name='marshal';
                function student(){
                    console.log(name);  //該方法代碼內為閉包代碼
                }
                return student;
            }
            var p=person();//因創建子函數對像,此時產生第一次閉包,并將子函數student返回給p,由于p沒有消失,子函數引用的變量name,一直在內存在存儲,直到將p=null,進行回收
            p();//執行子函數的閉包代碼塊,輸出"marhsal"
            p();//第二次執行子函數的閉包代碼塊,輸出"marhsal"
            person();//第二次創建子函數調對象,此時產生第二次閉包,但不執行子函數student代碼塊     
        </script>

二、常見閉包示例

2.1 子函數做為實參傳遞

?
1
2
3
4
5
6
7
8
<script>
            function setTimeoutTest(message,time){
                setTimeout(function(){
                    alert(message);//嵌套子函數引用父函數變量message,產生閉包
                },time);
            
            setTimeoutTest('提示信息',1000);
        </script>

2.2 計數器使用(函數返回)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
                function count(){
                    var i=1;
                    function add(){
                        i++;
                        console.log(i);
                    }
                    return add;
                }
                var c=count();//生產閉包
                c();//2
                c();//3
                c();//4
        </script>

三、閉包作用

3.1 閉包作用

1)子函數引用父函數的變量或函數,生命周期延長

2)其變量或函數一直存在,外部可以訪問函數內部的值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
            function count(){
                var i=1;
                function add(){
                    i++;
                    console.log(i);
                }
                return add;
            }
            var c=count();
            c();//2
            c();//3  i的生命周期延長
    </script>

四、閉包應用

4.1 自定義封裝js代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
外部js代碼  out.js  實現自加與自減
(function count(){
    var i=1;
    function add(){
        i++;
        console.log(i);
    }
    function subtract(){
        i--
        console.log(i);
    }
    window.count={
        add:add,
        subtract:subtract
    }
})();
?
1
2
3
4
5
6
7
引用 out.js代碼
<script src=out.js></script>
        <script>
            count.add(); //2
            count.subtract();//1
            count.subtract();//0
        </script>

五、閉包問題

5.1 閉包與this

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
     var name="marshal"; //創建全局變量
     var person={
         name:"leo",
         getName:function(){ //返回匿名函數
             return function(){  //返回this.name
                return this.name;  //返回字符串
             }
         }
     };
     alert(person.getName()()); //輸出marshal,內部函數不可能直接訪問外部函數this
     
</script>

解決方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
         var name="marshal";
             var person={
                 name:"leo",
                 getName:function(){
                     var that=this;//把this保存到閉包可以訪問的另一個變量中
                     return function(){
                        return that.name;
                     }
                 }
             };
             alert(person.getName()());//that 指向person,而不是window
    </script>

5.2 內存泄露

在使用閉包時,因變量一直存在,需要解除對象的引用,將對象設置為null, 從而確保其內存在適當時候可以被回收。

到此這篇關于關于Javascript閉包與應用的詳解的文章就介紹到這了,更多相關js閉包與應用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/Marshaljun/article/details/115785867

延伸 · 閱讀

精彩推薦
  • js教程three.js顯示中文字體與tween應用詳析

    three.js顯示中文字體與tween應用詳析

    這篇文章主要給大家介紹了關于three.js顯示中文字體與tween應用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習...

    郭志強10012021-12-24
  • js教程JS獲取一個字符串中指定字符串第n次出現的位置

    JS獲取一個字符串中指定字符串第n次出現的位置

    這篇文章主要介紹了JS獲取一個字符串中指定字符串第n次出現的位置,文章內容實例講解的很清晰,有需要的同學可以研究下...

    小king哥5162022-01-20
  • js教程JS實現簡單抖動效果

    JS實現簡單抖動效果

    這篇文章給大家結束了通過js實現抖動效果,非常不錯,具有參考借鑒價值,感興趣的朋友參考下吧...

    catEatBird9332022-01-12
  • js教程JavaScript中常用的幾種字符串方法匯總(新手必看)

    JavaScript中常用的幾種字符串方法匯總(新手必看)

    這篇文章主要給大家介紹了關于JavaScript中常用的幾種字符串方法的相關資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價...

    Humor_Mr9132022-02-25
  • js教程原生js 實現表單驗證功能

    原生js 實現表單驗證功能

    這篇文章主要介紹了原生js如何實現表單驗證功能,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    蔣偉平7372022-01-19
  • js教程你不知道的 JS 沙箱隔離

    你不知道的 JS 沙箱隔離

    本文接下來的內容,將介紹我在探索基于 Web Worker 實現 JavaScript 沙箱隔離方案過程中的一些資料收集、理解以及我的踩坑和思考的過程。...

    前端大全10372021-12-29
  • js教程js閉包和垃圾回收機制示例詳解

    js閉包和垃圾回收機制示例詳解

    這篇文章主要給大家介紹了關于js閉包和垃圾回收機制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    丶Serendipity丶8172022-01-24
  • js教程JS 的 六種打斷點的方式,你用過幾種?

    JS 的 六種打斷點的方式,你用過幾種?

    Debugger 是前端開發很重要的一個工具,它可以在我們關心的代碼處斷住,通過單步運行來理清邏輯。而 Debugger 用的好壞與斷點打得好壞有直接的關系。...

    神光的編程秘籍7962021-12-16
主站蜘蛛池模板: 91av精品 | 久久久国产精品久久久 | 懂色aⅴ精品一区二区三区蜜月 | 亚洲一区 日韩精品 中文字幕 | 久久久成人av | 国产欧美综合一区二区三区 | 精品伦精品一区二区三区视频 | 在线看av的网址 | 先锋影音av资源站 | 日韩性视频| 亚洲精品成人免费 | 亚洲国产成人av好男人在线观看 | 啪啪伊人 | 国产成人av网站 | 精品国产乱码久久久久久88av | 久久在线视频 | 精品久久一区 | 不用播放器的毛片 | 亚洲精品免费在线观看视频 | 日韩一区二区在线观看 | 国产一区二区精品 | 精品一区二区三区视频 | 中文字幕在线免费视频 | 亚洲视频日韩 | 黄网站色大毛片 | 国产精品一区久久久 | 欧美日韩一区二区三区在线观看 | 国产区视频在线观看 | 在线播放国产精品 | 国产精品久久久久久久久久久久久 | 一级欧美| 亚洲激情av | 久久精品国产91精品亚洲高清 | 91视频入口 | 亚洲精品久久久久久动漫 | 午夜小电影 | 成人高清网站 | 亚洲精品国产电影 | 激情婷婷 | 中文字幕亚洲一区二区va在线 | 国产成人毛片 |