摘要:什么是閉包閉包是指有權訪問另一個函數(shù)作用域中的變量的函數(shù)。在內存中維持一個變量。
什么是閉包
閉包是指有權訪問另一個函數(shù)作用域中的變量的函數(shù)。
function createFunc() { var name = "wheeler"; return function () { return name; } } var nameFunc = createFunc(); // nameFunc是一個閉包 var name = nameFunc(); console.log(name); // 解除對匿名函數(shù)的應用(以便釋放內存) nameFunc=null;
內部函數(shù)可以訪問外部函數(shù)的變量name,內部函數(shù)的作用域包含了外部函數(shù)的作用域
(由于閉包會攜帶包含它的函數(shù)的作用域,可能導致內存占用過多,因此謹慎使用閉包)
// 塊級作用域(通常稱為私有作用域)的匿名函數(shù)的語法 (function(){ // 塊級作用域 })();
將閉包定義在塊級作用域里面
// 可以減少閉包占用的內存問題,因為沒有指向匿名函數(shù)的引用。只要函數(shù)執(zhí)行畢,就可以立即銷毀其作用域鏈了 (function(){ function createFunc() { var name = "wheeler"; return function () { return name; } } var nameFunc = createFunc(); var name = nameFunc(); console.log(name); })();閉包的應用場景
用閉包模擬私有方法
var returnNum = (function () { var num = 0; function changeNum(value) { num = value; } return { add: function () { changeNum(10); }, delete: function () { changeNum(-10); }, getNum: function () { return num; } } })(); // 閉包 console.log(returnNum.getNum()); returnNum.add(); console.log(returnNum.getNum()); returnNum.delete(); console.log(returnNum.getNum());
緩存
var CacheCount = (function () { var cache = {}; return { getCache: function (key) { if (key in cache) {// 如果結果在緩存中 return cache[key];// 直接返回緩存中的對象 } var newValue = getNewValue(key); // 外部方法,獲取緩存 cache[key] = newValue;// 更新緩存 return newValue; } }; })(); console.log(CacheCount.getCache("key1"));
封裝
var person = function(){ var name = "default";//變量作用域為函數(shù)內部,外部無法訪問 return { getName : function(){ return name; }, setName : function(newName){ name = newName; } } }(); console.log(person.name);// undefined console.log(person.getName()); person.setName("wheeler"); console.log(person.getName());
setTimeout
function func(param) { return function() { console.log(param); } } var myFunc = func("wheeler"); setTimeout(myFunc, 1000);
保護函數(shù)內的變量安全。
在內存中維持一個變量。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/97618.html
摘要:此時的作用域鏈包含了兩個對象的活動對象和對象。閉包的應用場景保護函數(shù)內的變量安全。依然如前例,由于閉包,函數(shù)中的一直存在于內存中,因此每次執(zhí)行,都會給自加。 引子 JS的閉包一直是很多人不理解,也是在使用過程中經常出現(xiàn)問題的地方。每次看文章都會有所了解閉包,但是,用起來還是不對,而且錯誤百出,其關鍵問題還是出在對其不理解,不了解。此文章會不定期更新以及完善,希望在我學習的時候,讓大家也...
摘要:目錄一理解指針意義二用解決指針指向問題三的使用場景與少用之處一理解指針意義讓我們先理解好指針的定義引用的是函數(shù)執(zhí)行的環(huán)境對象永遠指向的是最后調用它的對象,也就是看它執(zhí)行的時候是誰調用的通俗地講,就是誰調用,就指向誰我們分類舉例舉例前先看下本 目錄 一.理解this指針意義二.用call(),apply(),bind()解決指針指向問題三.bind()的使用場景與少用之處 一.理解thi...
摘要:閉包執(zhí)行上下文決定了變量作用域而閉包,它其實是一種決策,是一種模式,讓我們可以靈活的改變變量作用域。所以,在本質上,閉包就是將函數(shù)內部和函數(shù)外部連接起來的一座橋梁。只要咱們弄明白閉包,其中的自然跑不掉。 閉包 this 執(zhí)行上下文決定了變量作用域 而閉包,它其實是一種決策,是一種模式,讓我們可以靈活的改變變量作用域。 按慣例,上栗子 var global = glo...
閱讀 1422·2021-10-08 10:05
閱讀 4236·2021-09-22 15:54
閱讀 3161·2021-08-27 16:18
閱讀 3161·2019-08-30 15:55
閱讀 1528·2019-08-29 12:54
閱讀 2806·2019-08-26 11:42
閱讀 635·2019-08-26 11:39
閱讀 2186·2019-08-26 10:11