javascript中的闭包的功能和立即执行函数

一、闭包:

闭包就是把里面的函数保存到了外部形成的当内部函数被保存到了外部的时候,将会生成闭包。

function text() {
 var num = 0;
function a() {
console.log(++num)
}
return a;
 }
var text = text()
a()

上述就是闭包的基本结构,在函数里面定义函数,返回里面这个函数。这样就形成了闭包。

闭包的作用:

1、实现公有变量:函数累加器

不依赖函数变量,可以实现累加

2、使各个函数之间的变量更加严谨,更好的实现封装

基本的形式:

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

这个函数输出的为十个10

要解决这个问题,使其输出0-9十个数字,这就要提到立即执行函数了。

二、立即执行函数

(function (a,b){
          console.log(a,b)}(1,2))

上述为基本形式。

立即执行函数可以加参数,可以由返回值。并且,只有表达式才能被执行。

如以下这个例子:

var demo = function(){console.log('a')}()

只要被这种定义的表达式调用之后,,就不是一个函数了,就没有了,所以会报错。

2、function text(){} 这叫函数声明,不是表达式,不能被执行

但是,在其前面加上表达式符号:— 、+、*、/ 之后就可以被执行,如:
 

-functoin text(){}();在前面加了+  -  *  |之后,就变成了个表达式

其中,外面的括号可以写到里面

上面的那个函数的解决办法就是要用到立即执行函数;

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

这样就解决了问题

以上,希望能对你有所帮助,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值