說一個閉包在實際開發中的應用


  閉包簡單來說就是函數中的函數,也可以把它理解為一種現象,就是說一個函數要訪問另外一個目標函數內部的變量,就要在目標函數中再定義一個函數(以此來把作用域鏈往下延長一段,目的就是為了利用js在找自由變量時,會沿着作用域鏈一級一級往上找的特點),並將這個定義的函數return出來,供外部使用。在實際開發中,閉包主要是用來封裝變量,收斂權限。

  

function isFirstLoad(){
            var list=[];
            return function(option){
                if(list.indexOf(option)>=0){ //檢測是否存在於現有數組中,有則說明已存在
                    console.log('已存在')
                }else{
                    list.push(option);
                    console.log('首次傳入'); //沒有則返回true,並把這次的數據錄入進去
                }
            }
        }

var ifl=isFirstLoad();
ifl("zhangsan"); 
ifl("lisi");
ifl("zhangsan");
                

  在瀏覽器控制台打印如下:

  

  可以看到,如果外界想訪問_list變量,只能通過我定義的函數isFirstLoad來進行訪問,我對想訪問_list的外界只提供了isFirstLoad這一個接口。至於怎么操作_list,我已經定義好了,外界能做的就只是使用我的函數,然后傳幾個不同的參數罷了。

  最后順便說一下,作用域鏈是在定義的時候就已經確定了,和誰來執行,什么時候執行均沒有一毛錢關系。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM