定义
闭包是指有权访问另一个函数作用域中的变量的函数。
原理
function init() {
var name = "Mozilla"; // name 是一个被 init 创建的局部变量
function displayName() { // displayName() 是内部函数,一个闭包
alert(name); // 使用了父函数中声明的变量
}
displayName();
}
init();
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
思考这两段代码 最后结果是一样 但是函数的调用却有很大区别
第一段代码 dispalyName(子函数)的调用是由init函数(父函数)内部进行管理 而在外部我们只能对init进行调用
第二段代码 dispalyName(子函数)和makeFunc(父函数)的调用都可以在外部进行管理,这就是利用了闭包 让我们可以在外部访问 mamakeFunc内部变量
两段代码结果一致 的直接和根本原因是因为 myFunc实际就是displayName的引用 而dispaly调用时 形成的作用域链可以查找到name变量 这样就形成了我们可以在外部管理makeFunc变量的方法