网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Javascript如何实现闭包-创新互联

这篇文章将为大家详细讲解有关Javascript如何实现闭包,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站设计、平武网络推广、微信小程序、平武网络营销、平武企业策划、平武品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供平武建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

闭包

当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露

//内部的函数被返回到外部,必然形成闭包
function a(){
function b(){
var b = 234;
console.log(a);
}
var a = 123;
return b;
}
var demo = a();
demo(); // -->123
function test1(){
var num = 100;
function test2(){
num ++;
console.log(num);
}
return test2;
}
var demo1 = test1();
demo1();  //101
demo1();  //102
//
function test(){
            var arr = [];
            for(var i = 0; i < 10; i++){//当i = 10的时候循环停止
                arr[i] = function(){ //arr的每一位都是一个函数
                    console.log(i);//虽然函数已经定义,但未执行
                }
            }
            return arr;
        }
        var myArr = test();
        for(var i = 0; i < myArr.length; i++ ){
            myArr[i]();
        }

最后函数执行的时候会调用test的AO中的i

AO{
i = 10;
}

解决方案:立即执行函数

function test() {
            var arr = [];
            for(var i = 0; i < 10; i++) {
                (function(j) {
                    arr[j] = function() {
                        console.log(j);
                    }
                }(i))
            }
            return arr;
        }
        var myArr = test();
        for(var i = 0; i < myArr.length; i++) {
            myArr[i]();
        }

1.实现公有变量

eg:函数累加器

function add(){
var count = 0;
function demo(){
count ++ ;
console.log(count);
}
return demo;
}
var counter = add();
counter();

2.可以做缓存

eg:eater

function test2(){
var food = 'apple';
var obj = {
eatFood : function(){
if(food != ""){
console.log("I am eatting " + food);
food = '';
}else{
console.log("There is nothing! empty!");
}
},
pushFood : function(myFood){
food = myFood;
}
}
return obj;
}
var obj = test2();
obj.eatFood();
obj.eatFood();
obj.pushFood('banana');
obj.eatFood();

3.可以实现封装,属性私有化。

eg: Person();

关于Javascript如何实现闭包就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


本文名称:Javascript如何实现闭包-创新互联
文章网址:http://bjjierui.cn/article/deijcc.html

其他资讯