闭包原理与作用

248 阅读1分钟

定义

闭包是指有权访问另一个函数作用域中的变量的函数。

原理

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变量的方法