js闭包总结

今天小主复习了一下有关js闭包的问题,下面给大家分享一下自己的学习心得,与什么不足之处,还望大家批评指正

闭包:
既重用局部变量,又保护变量不受污染的机制
为什么:
全局变量:随处可用,可重复使用
缺点:极易被污染
局部变量:不会被污染
缺点:不可反复使用,只能在函数内使用
何时使用闭包:
如果希望一个变量可以反复使用且不被污染!
闭包三步:
①外层函数包裹受保护的变量和操作变量的内层函数
②外层函数返回内层函数
③调用外层函数,用一个变量接着,获得内层函数对象
笔试中:
①先找到受保护的变量
特殊:受保护的额变量很肯能不是声明时的初始值—看外层函数调用结束时的值
②找到操作变量的值,确定如何操作
特殊:2中办法返回
①return
②肯能直接给全局变量赋值
下面给大家举个具体的例子:
例一:

function f(){
            var n=1;
            return function(){return n++;}
        }
        var getNum=f();
        console.log(getNum());//1
        console.log(getNum());//2
        console.log(getNum());//3

例子二:

function fun(){
            for(var i=0,arr=[];i<3;i++){
                arr[i]=function(){return i;}
            }
            return arr;
        }
        var funs=fun();
        console.log(
            funs[0](),//3
            funs[1](),//3
            funs[2]()//3
        );

分析:
首先:
for(var i=0,arr=[];i<3;i++){
arr[i]=function(){return i;
}
这里的function(){return i;}没有被调用不会被执行,所以后面return arr返回的是三个函数对象
其次:
var funs=fun();
funs中装了三个还没有执行的函数
funs:[
function(){return i;},
function(){return i;},
function(){return i;}
]
例子三:

function outer(){
            var i=999;
            nAdd=function(){i++;}
            /*
                为一个从未声明过的变量进行赋值,会在全局自动创建-------禁止使用
            */
            return function(){return i;}
        }
        var getNum=outer();
        console.log(getNum(),nAdd(),getNum());//999 undefined 1000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值