javascript中的闭包是一种函数的高级应用
一、函数的作用域
在了解闭包之前,我们必须知道什么是函数的作用域。
函数的作用域可以分为定义作用域和执行作用域。
函数在定义时,存在一个位置,就是当前函数的定义作用域,
函数在执行时,存在一个位置,就是当前函数的执行作用域
function fn(){
console.log(2);
}
fn(); //此时,函数fn的定义作用域和执行作用域都是全局作用域
function abc(){
fn(); // 此时,函数fn的定义作用域仍是全局作用域,但是它的执行作用域变成了函数abc的局部作用域
}
函数在执行时,可以拿到当前函数所在定义作用域中的所有数据
二、闭包
function fn(){
var a=1;
a++;
console.log(a);
}
fn(); // 2
fn(); //不管执行多少次,此时fn的执行结果始终是2。因为变量a在函数执行时被创建,在执行结束后被删除,重复执行函数就意味着重复创建删除变量a
那如何能够实现变量a自增的效果呢?
function fn(){
var a=1;
function abc(){
a++;
console.log(a);
}
return abc;
}
var res=fn();
res(); //2
res(); //3,多次执行就会实现累加效果
以上代码就是一个简单地闭包,简单来说,闭包就是能够读取其他函数内部变量的函数。
闭包的形成必须具备以下三个条件:
1.函数的嵌套
2.内部函数使用外部函数的变量
3.将内部函数返回,在外部函数的外部,执行返回的函数