闭包与立即执行函数
闭包与立即执行函数
一、闭包
(一)概念
闭包:有权访问另一个函数作用域中变量的函数。抽象地来说,内部函数被保存到外部时,就会生产闭包
内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)
function outer() {
var a = "来自外部函数的数据";
return function inner() {
console.log(a)
}
}
var rs = outer()
rs()
闭包的特点
- 可以让外部访问函数内部变量
- 局部变量会常驻在内存中
- 可以避免使用全局变量,防止全局变量污染;
- 造成内存泄漏(局部变量内存空间被长期占用,而不被释放)
(二)闭包的作用
-
将操作的变量或对象隐藏起来,只允许特定的方法才能访问
定义一个计数器:
- 使用全局变量
i
——全局变量名污染问题,全局变量可以修改 - 使用局部变量
i
——只在函数内部有效,函数调用完销毁,而且全局无法访问 - 使用闭包变量
i
——全局可以访问,不会被随意修改
- 使用全局变量
function count(){
var i=0;
return function () {
return ++i;
}
}
c1 = count();
console.log(c1()); //print1
console.log(c1()); //print2
c2 = count();
console.log(c2()); //print1
-
已运行结束的函数上下文中的变量对象继续留在内存中
- 因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收
二、立即执行函数
参考文章
https://www.cnblogs.com/sharpest/p/11439763.html
https://blog.csdn.net/weixin_43586120/article/details/89456183