对以上示例的一部分理解:

var add = function () 

{

    var counter = 0;

    alert("父方法"); // 只有在 add 赋值时执行一次

    var add_child = function(id) {

        var counter_res = 0;

        if(id === 1)

        {

            counter_res = counter + 1;

        }

        else if(id === 2)

        {

            counter++;

            counter_res += counter;

        }

        else

        {

          counter_res = 0;

        }

        alert("子方法");  // 每次执行 add() 都会执行

        return counter_res;

    };

    return add_child;

    // counter 作用域在父函数中, 自然在其子函数中也能使用,但因为

    // 子函数还需要使用count, 所以 count 不随着父函数一起释放。

    // 利用在 function(){}() 的形式自动执行一遍父匿名函数, 赋给 add 子方法。

}();

/*

add = function(){},是一个函数的普通定义方式,

但是 add = function(){}(),会在add定义时即执行一次function(){},

这样做的目的是为了给function(){}中的变量赋初始值,并将add_child=function(){}这个函数返回给add这个变量。

当以后执行add()这个函数时,其实执行的是add_child=function(){}。

这样做,闭包的目的就在于,你通过add这个对象访问不到counter这个变量,无形中创造了一个私有变量。

*/

add(1);

add(2);

add(2);

尝试一下 »


var add = function () 

{

    var counter = 0;

    alert("父方法"); // 只有在 add 赋值时执行一次

    var add_child = function(id) {

        var counter_res = 0;

        if(id === 1)

        {

            counter_res = counter + 1;

        }

        else if(id === 2)

        {

            counter++;

            counter_res += counter;

        }

        else

        {

          counter_res = 0;

        }

        alert("子方法");  // 每次执行 add() 都会执行

        return counter_res;

    };

    return add_child;

// counter 作用域在父函数中, 自然在其子函数中也能使用,但因为

// 子函数还需要使用count, 所以 count 不随着父函数一起释放。

// 利用在 function(){}() 的形式自动执行一遍父匿名函数, 赋给 add 子方法。

}();

/*

add = function(){},是一个函数的普通定义方式,

但是 add = function(){}(),会在add定义时即执行一次function(){},

这样做的目的是为了给function(){}中的变量赋初始值,并将add_child=function(){}这个函数返回给add这个变量。

当以后执行add()这个函数时,其实执行的是add_child=function(){}。

这样做,闭包的目的就在于,你通过add这个对象访问不到counter这个变量,无形中创造了一个私有变量。

*/

add(1);

add(2);

add(2);


执行结果:

父方法

子方法 1

子方法 1

子方法 2

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月28日

referrer策略和meta标签的问题

referrer策略和meta标签的问题请求后端接口时,banner图片的请求出现403错误:GEThttp://xxxxxxxxxxxx403(Forbidden)。在网上搜寻一番,解决方法如下:在index.html中的head中添加<meta name="referrer" content="no-referrer" />。在此之前,关于r

热门专题

大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
云南开放大学|云南开放大学报名,云南开放大学报考,云南开放大学,什么是云南开放大学,云南开放大学学历,云南开放大学学费,云南开放大学报名条件,云南开放大学报名时间,云南开放大学学历,云南开放大学专业
云南开放大学
APP开发|app开发_app开发公司_app软件开发_专业app开发_云南app开发公司_app定制_原生app开发定制
APP开发
易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招
综合高中|云南综合高中,昆明综合高中,综合高中能考本一吗,综合高中和普通高中的区别,综合高中是什么意思,综合高中能参加全国统一高考吗,综合高中可以考哪些大学,综合高中的学籍是什么
综合高中
外贸网站建设|外贸网站建设,英文网站制作,英文网站设计,美国主机空间,外贸建站平台,多语言网站制作
外贸网站建设
云南高职单招|云南单招,云南单招网,云南高职单招网,云南高职单招,云南单招学校,云南单招培训
云南高职单招
云南综合高中|云南综合高中
云南综合高中

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部