闭包(变量作用域JS)

我对Javascript闭包的理解



var tmd = function(){//这里我们叫做"匿名函数1"

    var tmdNum = 0;

    return function(){//这里我们叫做"匿名函数2”

        //在这儿你可以随便写你想些的代码,我无所谓。

         tmdNum ++;

         alert(tmdNum);

    }





}(); //千万要注意这里的这个小括号。

这段代码什么意思呢?

第一步:先把函数里面的内容都删了,看总体的结构

var tmd = function(){}();

这行代码的意思是 先声明一个变量,变量的名字叫做tmd。

function(){} 这是声明了一个匿名函数

function(){}(); 加个括号的意思是让这个匿名函数立即执行。

所以,tmd的值就是这个匿名函数的返回值。如果这个函数什么也不返回,tmd的值就是undefined。



第二步:看匿名函数里面的内容

匿名函数里面有做了两件事情

一是定义了一个变量tmdNum,并赋初值为0;

二是执行一个return,return function(){} 表示返回的是一个函数。这个函数的函数体执行的步骤跟我们文章一开始写的那个tmd函数的执行步骤是一样的。



结果:我们折腾了这么一大圈,达到的目的是什么呢。首先,匿名函数1 return了一个函数(匿名函数2)赋给了tmd变量。这样调用tmd(),实际调用的就是匿名函数2。因为tmdNum这个变量只能被匿名函数2调用,所以最终的效果就是tmdNum这个变量只能在tmd()调用的时候改变。

你可能感兴趣的:(JavaScript)