1.定义:当一个内部函数能被其外部函数之外的变量引用时,就形成了一个闭包。
也可以定义为:能够访问另一个函数作用域的变量的函数。
1.
//函数B为一个闭包
function A(){ //外部函数
function B(){//内部函数
console.log('Hello!');
}
return B;
}
var C = A(); //外部函数外的变量
C();// Hello !
2.
function outer() {
var a = '变量1'
var inner = function () {
console.info(a)
}
return inner // inner 就是一个闭包函数,因为他能够访问到outer函数的作用域
}
2.闭包应用的两种情况:函数作为返回值,函数作为参数传递。
1.
//返回值
function fn(){
var max=10;
return function bar(x){
if(x>max){
console.log(x)
}
}
}
var f1 = fn()
f1(15)
2.
//传参
var max = 10;
var fn = function(x){
if(x>max){
console.log(x)
}
}
(function (f){
var max =100;
f(15)}
)(fn)
拓展相关知识点:
1. js 垃圾回收机制(GC)
原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。
2.执行上下文栈
执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个。
具体查看:http://www.cnblogs.com/wangfupeng1988/p/3989357.html
3.具体详细描述参考资料
https://www.jianshu.com/p/26c81fde22fb
https://www.cnblogs.com/wangfupeng1988/p/3994065.html