您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關javascript中閉包的應用場景,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
閉包的定義:
官方對閉包的解釋是:一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。簡單的說,javascript允許使用內部函數---即函數定義和函數表達式位于另一個函數的函數體內。而且,這些內部函數可以訪問它們所在的外部函數中聲明的所有局部變量、參數和聲明的其他內部函數。當其中一個這樣的內部函數在包含它們的外部函數之外被調用時,就會形成閉包。
閉包的使用場景:
1】、采用函數引用方式的setTimeout調用
setTimeout的第一個參數一般是一個即將要執行的函數,第二個參數是一個延遲時間。
如果一段代碼想要通過setTimeout來調用,那么它需要傳遞一個函數對象的引用來作為第一個參數,但這個函數對象的引用無法為將要被延遲執行的對象提供參數。此時可以調用另一個函數來返回一個內部函數的調用,將那個內部函數對象的引用傳遞給setTimeout函數,內部函數執行時需要的參數,在調用外部函數時傳遞給它,setTimeout在執行內部函數時無需傳遞參數,因為內部函數仍然能夠防偽外部函數調用時提供的參數。
2】、小范圍代替全局變量
3】、訪問私有變量的特權方法?
特權方法:有權訪問私有變量和私有函數的公有方法
私有變量包括:
1)、局部變量
2)、函數的參數
3)、函數內部定義的其他函數(閉包)
以上代碼的構造函數中定義了兩個特權方法:getName()、setName(),這兩個方法可以通過對象訪問,而且都有權訪問私有變量name,但是在Person構造函數外部,沒有任何方法可以訪問name。由于這兩個方法是在函數內部定義的,因此作為閉包能夠通過作用域鏈訪問到name
看完上述內容,你們對javascript中閉包的應用場景有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。