闭包与非闭包

闭包函数:闭包简单理解成"定义在一个函数内部的函数"。

下面是一个标准的闭包函数,内部定义的函数可以读取外部函数中定义的变量  ,闭包函数须是在内部定义的函数,而不是在外部定义的。

    var test = 10;
    var f = (function (){ 
        var test = 20;
         return function (){ 
            alert("访问---"+test);//20
} })(); f();

变形1:

返回一个外部定义的函数,并执行这个外部函数foo

    var test = 10;
    var f = (function (){ 
        var test = 20;
        return foo;  //10
    })();

    f();
    
function foo(){
        alert('foo1:'+test);   //10
    }

变形2:

这个其实已经不是一个闭包,仅仅是一个函数调用,在自执行的函数里,调用了另一个函数foo,而foo是在外部定义的,是无法读取到内部函数里定义的局部变量的,所以,foo()调用时,读取的是外部定义的全局变量10

var test = 10;
 (function (){ 
    var test = 20;
    foo();   //10

    })();

function foo(){
        alert('foo1:'+test);   //10
    }
原文地址:https://www.cnblogs.com/lydialee/p/4869472.html