Day07-JS高级编程

Day02-JS高级编程

一、闭包(扩展)

概念:闭包指的就是在子函数中,可以访问父级函数中的变量。闭包形成的条件,需要在一个函数中嵌套一个子函数,内部函数访问外部函数的变量。

案例1-闭包的基础

        /**
         * 函数声明
        */
        function fun(){
            var name = "hello" 
            return function(){
                console.log(name);
            }
        }    

        //外部函数调用,外部函数执行完后,函数的代码会从栈内存中销毁
        let fun2 = fun()
        // console.log(fun2);
        //调用子函数
        fun2()

fun()调用完成后,fun这个函数会从内存中清除。

变量name会存放在闭包空间里面。

当调用内部函数fun2(),name使用完,闭包空间里面对应name消失

案例2

如下代码输出的结果都是一样的

    <script>
        
        /**
         * 页面打开,for循环会立马执行,会创建5个延时器
         * 延时器在定时时间到了才会执行
         * 
         * 循环执行完后,i的值已经是5了,又过了5秒延时器开始执行,延时器要输出变量i,会输出变量i的最终结果
        */
        for(var i=0;i<5;i++){
   
            setTimeout(() => {
   
                console.log("-------",i);
            }, 5000);
        }
    </script>

使用闭包解决这个问题

    <script>
        
        /**
         * 页面打开,for循环会立马执行,会创建5个延时器
         * 延时器在定时时间到了才会执行
         * 
         * 循环执行完后,i的值已经是5了,又过了5秒延时器开始执行,延时器要输出变量i,会输出变量i的最终结果
        */
        for(var i=0;i<5;i++){
   
            //立即执行函数作为父级函数,index是父级函数的变量
            (function(index){
   
                //延时器中的函数作为子函数,
                setTimeout(() => {
   
                    console.log("-------",index);
                }, 5000);

            })(i)
        

你可能感兴趣的:(前端,javascript,前端,开发语言)