一起学习javascript-闭包(1)

<script>

// 写一个闭包函数

function Bigsum(arr){

    var middlesum=function bottomsum(){

        return arr.reduce(function lastsum(a,b){

            return a+b

        });

        //arr.reduce()函数是把数组中的元素进行累加,然后返回累加结果。

    }

    console.log("middlesum="+middlesum);

    return middlesum;

}

// 这个时候我们调用一下这个函数,传点值给他

var a=Bigsum([1,2,3,4,5])

//打印一下a看看它是不是等于15

console.log("a="+a)

//显示为

// a=function bottomsum(){

//         return arr.reduce(function lastsum(a,b){

//             return a+b

//         });

//      

//     }

// 发现不等于15,这是为什么呢,我们回到函数中去,发现了一句return middlesum,

// 我们去打印一下middlesum看看它到底等于什么

// console.log("middlesum="+middlesum);

// 把上面这句放到return middlesum前面(上面我已经写出)

// 打印出

// middlesum=function bottomsum(){

//         return arr.reduce(function lastsum(a,b){

//             return a+b

//         });

//        

//     }

// 这就能说得通为什么a=function bottomsum(){

//         return arr.reduce(function lastsum(a,b){

//             return a+b

//         });

// 这是将function bottomsum()当作的一个式子,而没真正调用这个函数,那要怎么才是正确的呢

// 第一种方法,

// 改为 return middlesum();//返回的是这个函数的返回值

// console.log("a="+a)//显示为15

// 第二种方法

var b=a();

// 相当于重新确认a为一个函数,而不是一个变量,然后调用a函数,

console.log("b="+b)//显示为15

// 第三种方法

console.log("a="+a())//显示为15

// 总结一下,像这种我们在函数Bigsum中又定义了函数middlesum,并且,内部函数sum可以引用外部函数Bigsum的参数和局部变量,

// 当Bigsum返回函数middlesum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。

// 请再注意一点,当我们调用Bigsum时,每次调用都会返回一个新的函数,即使传入相同的参数:

var a1=Bigsum([1,2,3,4,5])

console.log("a1="+a1())

console.log("a===a1吗:",a===a1)//a===a1吗: false

// a()和a1()的调用,每次都像新的一样互不影响

</script>

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值