- 词法作用域:
词法作用域的一个例子:在 JavaScript 中,变量的作用域是由它在源代码中所处位置决定的(显然如此),并且嵌套的函数可以访问到其外层作用域中声明的变量。 - 定义:闭包是一个函数和函数所声明的词法环境的结合
闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。 - 一般说来,可以使用只有一个方法的对象的地方,都可以使用闭包。
- 一个闭包可以返回一个函数,也可以返回多个函数。
在返回一个函数的时候,若创建多个实例,同一个函数定义体,不同的词法环境,alert()的值也不同。每个闭包有自己的词法环境。例如:
function maker(v){
let a=v;
return function(){
alert(a);
}
}
const maker1=maker(1);//1
const maker2=maker(2);//2
const maker3=maker(3);//3
一个函数体在返回多个函数的时候,例如(一个提供加减法的函数,只要传入被操作的值,就可以获取对加减法,一个实例可以共享一个词法环境,并有多个函数使用):
function Counter(){
const base=0;
return {
add:function(){return ++base;},
plus:function(){return --base;}
}
}
const c=Counter();
c.add();
c.plus();
5.闭包使用注意点:
对捕获的变量只是个引用,而不是复制;
符函数每调用一次,会产生不同的闭包;
在循环问题中要注意变量的变化