陈旧定义
闭包(closure),是指函数变量能够保存在函数作用域内,因而看起来是函数将变量“包裹”了起来
//依据定义,包括变量的函数就是闭包
function foo() {
var n = 0;
}
cosole.log(n) // Uncaught ReferenceError: n is not defined
定义一
闭包是指能够接见其地点作用域的函数
//根据定义一的说法,须要经由过程作用域链在全局环境中查找变量的函数就是闭包
var n = 0;
function foo() {
console.log(n); //0
}
foo();
定义二
闭包是指有权接见另一个函数作用域中的变量的函数
//依据定义二,接见上层函数的作用域的内层函数就是闭包
function foo() {
var a = 2;
function bar() {
console.log(a);
}
bar();
}
foo();
定义三
闭包是指在函数声明时的作用域之外的处所被挪用的函数
//经由过程将该函数作为返回值或许作为参数被通报
function foo() {
var a = 2;
function bar() {
console.log(a); //2
}
return bar;
/*函数的返回值能够简写为:
return function {
console.log(a) //2
}
*/
}
foo()();