深切明白闭包——究竟什么才是闭包

陈旧定义

闭包(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()();
    原文作者:曲斌
    原文地址: https://segmentfault.com/a/1190000012940414
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞