闭包
系列文章
这是JavaScript
系列文章:
简述
在我理解,闭包就像是 函数内的函数,类似俄罗斯套娃。
MDN: 闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量。
内函数可以访问外函数内的变量,而外函数无法访问内函数内的变量。
但是总感觉 闭包 配合 this 食用可能更好
DEMO
示例一
function init() {
let name = "Mozilla"; // name 是一个被 init 创建的局部变量
function displayName() { // displayName() 是内部函数,一个闭包
alert(name); // 使用了父函数中声明的变量
}
displayName();
}
init();
这个是直接在外函数内就执行内函数。
示例二
function makeFunc() {
let name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
外函数内不直接执行内函数,而是将外函数赋值给一个变量,这个变量其实更像是内函数的调用。
更能体现这一特点的代码:
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
参考链接
[1] 阮一峰. 学习Javascript闭包(Closure)
[2] MDN. 闭包
感谢