摘要:什么是闭包闭包是指有权访问另一个函数作用域中的变量的函数。在内存中维持一个变量。
什么是闭包
闭包是指有权访问另一个函数作用域中的变量的函数。
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);// 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);
保护函数内的变量安全。
在内存中维持一个变量。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/97618.html
摘要:此时的作用域链包含了两个对象的活动对象和对象。闭包的应用场景保护函数内的变量安全。依然如前例,由于闭包,函数中的一直存在于内存中,因此每次执行,都会给自加。 引子 JS的闭包一直是很多人不理解,也是在使用过程中经常出现问题的地方。每次看文章都会有所了解闭包,但是,用起来还是不对,而且错误百出,其关键问题还是出在对其不理解,不了解。此文章会不定期更新以及完善,希望在我学习的时候,让大家也...
摘要:目录一理解指针意义二用解决指针指向问题三的使用场景与少用之处一理解指针意义让我们先理解好指针的定义引用的是函数执行的环境对象永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的通俗地讲,就是谁调用,就指向谁我们分类举例举例前先看下本 目录 一.理解this指针意义二.用call(),apply(),bind()解决指针指向问题三.bind()的使用场景与少用之处 一.理解thi...
摘要:闭包执行上下文决定了变量作用域而闭包,它其实是一种决策,是一种模式,让我们可以灵活的改变变量作用域。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。只要咱们弄明白闭包,其中的自然跑不掉。 闭包 this 执行上下文决定了变量作用域 而闭包,它其实是一种决策,是一种模式,让我们可以灵活的改变变量作用域。 按惯例,上栗子 var global = glo...
阅读 1296·2021-10-08 10:05
阅读 4111·2021-09-22 15:54
阅读 3106·2021-08-27 16:18
阅读 3108·2019-08-30 15:55
阅读 1439·2019-08-29 12:54
阅读 2750·2019-08-26 11:42
阅读 544·2019-08-26 11:39
阅读 2129·2019-08-26 10:11