函数的闭包作用域

75 阅读1分钟

产生闭包的条件:

  1. 在函数内部也有一个函数
  2. 函数内部的函数里面用到了外部函数的局部变量
  3. 外部函数把内部函数作为返回值return出去了
function test(){
var a ;
return function(){
console.log(a);
}
}

//此时就产生了闭包

如哦需要执行函数内部的函数体,调用test()()

正常情况下,我们调用一个函数,其里面的局部变量会在函数调用结束后销毁,这也是我们在全局作用域里面无法访问函数局部变量的原因。但是,如果你使用了闭包,那么就会让这个局部变量不随着原函数的销毁而销毁,而是继续存在。比如我反复调用这个内部函数,就会发现这个变量a一直存在,就好像是一个全局作用域里面的变量

function test(){
var a;
return function(val){
a+=val;
conxole.log(a)
}
}

调用:
//获取内部函数
var inner=test();
//第一次调用内部函数
inner(1);//=>1
//第二次调用内部函数
inner(2);//=>2
//第三次调用内部函数
inner(3);//=>3