本篇文章給大家帶來的內容是關於js中閉包的定義是什嗎?js閉包的應用情境,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。
什麼是閉包
閉包是指有權訪問另一個函數範圍中的變數的函數。
function createFunc() { var name = "wheeler"; return function () { return name; }}var nameFunc = createFunc(); // nameFunc是一個閉包var name = nameFunc();console.log(name);// 解除對匿名函數的應用(以便釋放記憶體)nameFunc=null;
內建函式可以訪問外部函數的變數name,內建函式的範圍包含了外部函數的範圍
(由於閉包會攜帶包含它的函數的範圍,可能導致記憶體佔用過多,因此謹慎使用閉包)
可以通過模仿塊級範圍減少閉包導致的記憶體佔用過多
// 塊級範圍(通常稱為私人範圍)的匿名函數的文法(function(){ // 塊級範圍})();
將閉包定義在塊級範圍裡面
// 可以減少閉包佔用的記憶體問題,因為沒有指向匿名函數的引用。只要函數執行畢,就可以立即銷毀其範圍鏈了(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";//變數範圍為函數內部,外部無法訪問 return { getName : function(){ return name; }, setName : function(newName){ name = newName; } }}();console.log(person.name);// undefinedconsole.log(person.getName());person.setName("wheeler");console.log(person.getName());
function func(param) { return function() { console.log(param); }}var myFunc = func('wheeler');setTimeout(myFunc, 1000);