「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」
前言
大家好,我是cv竹叶,相信大家对JavaScript闭包
熟悉但又陌生,也许在工作中就用过,或面试经常被问到,但是就是说不清楚什么是闭包,今天就让我们来了解了解,什么是JavaScript闭包
吧!
闭包
js的执行机制
首先我们需要了解执行代码的环境,当代码在JavaScript中运行时,js会执行上下文查找变量和变量的作用域。
变量可以在作用域内调用到全局的变量,但是不同作用域内的变量不能直接调用。
var a = 1,b = 2;
function closure1(){
let c = 3;
console.log(a+b+c);
}
function closure2(){
console.log(a+b+c);
}
closure1();//6
closure2();//c is not defined
闭包的简单解释
说到闭包,你可以理解为,一个书包里面装有小包,而书包可以随时带走移动。
当你需要用到书包里面东西的时候,就需要先打开书包,才能打开书包里面的小包
,此刻小包就是闭包。
function Bag(){//书包
var a = 1,b = 2;
function smallBag(){//小包
let c = 3;
return a+b+c;
}
return smallBag;
}
闭包的应用
闭包应用场合主要是:创建私有的函数方法和变量,他们之间互不影响,且函数外的无法访问这些方法和变量。也就是平时提到的局部变量像let、const
。
闭包的使用,可以大大减少了全局变量的使用,增强了网页的安全性,防止被恶意传入变量改变原有的变量!
如下面的闭包例子,闭包外的无法对num值进行修改,提高了安全性!
//计算num值
var countNumber = (function(){
var num = 0;
return function(){
return ++num;
};
})();
闭包的缺陷
通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,在创建了一个闭包以后,这个函数的作用域就会一直保存到闭包不存在为止,就是常驻内存会增大内存使用量,并且使用不当很容易造成内存泄露。
如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。
如何销毁闭包呢?
当它不被任何其他的对象引用的时候,会自动销毁,或者我们也可以手动释放对象引用销毁!
var man = Bag();
man = null;//取消引用
结言
希望大家都对闭包有所了解了。
最简洁的表达是最清晰的解释,如果有帮到你,就点了个赞叭~