JS中回调函数、作用域及闭包详解!!

一、回调函数

1.什么是回调
回调(callback):把一个函数作为一个参数传到一个主函数里面,当主函数执行完之后,再执行传进去的那个函数,这个过程就叫回调;作为参数的那个函数就叫回调函数

<script>
        var fn = function() {
            console.log("我是回调函数");
        }
        function main(callback) {
            console.log("我是主函数");
            setTimeout(() => {
                callback();
            }, 2000);
        }    
        // main(fn);

        var hasMask = function () {
            console.log("口罩到货,速速来购!");
        }
        function buyMask(myfn) {
            console.log("去药店买口罩,都没货了,留了一个号码,有货call me");
            setTimeout(() => {
                myfn();
            }, 3000);
        }
        buyMask(hasMask);
    </script>

七、作用域

1.什么是作用域
一条数据起作用的范围

2.全局作用域
声明在任何函数函数以外的数据,拥有全局作用域
全局作用域的数据,在网页的任何地方都能使用,只有页面关闭后才会被删除

3.局部作用域
函数的作用域就是局部作用域
局部作用域的数据,只能在函数内部访问和修改,且在函数运行之后被立即删除
局部作用域的数据
函数内使用var或let声明的变量
函数内的函数
函数的形参

var str = "hello";
    document.write(str);

    function name(){
     var str2 = "hello2!"
    }
    // name();
    // console.log(str2);//报错
    // function fn(a){
    //     alert(a)
    // }
    // fn(100);//100
    // console.log(a);//报错

    // function fn2(){
    //     var fn3 = function(){
    //         console.log("OK");
    //     }
    // }
    // fn2();
    // fn3();//报错

    function  fn4(){
        return function fn5(){
            console.log("OK");
        }
    }
    fn4()();
    // fn5();
    
    
    
    // fn5();//报错

    // function fn6(){
    //      num = 100;
    // }
    // fn6();
    // console.log(num);//100

八、作用域链
当我们调用一条数据的时候,会先在本作用域查找,如果找不到就向上查找父作用域,如果还是没找到,就继续往上,一直找到全局作用域,还是找不到就报错
九、闭包
在父函数内部,创建另一个函数,通过另一个函数访问这个父函数的局部变量

var authorName = "山边小溪";
    function doSomething(){
        var blogName = "梦想天空";
        function innerSay(){
           alert(blogName);
        }
        return innerSay;
    }
    var myfn = doSomething();
    myfn();

1.闭包的用途
可以读取函数内部的变量
让这些变量的值始终保持在内存中
2.闭包的缺点
闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露
闭包会在父函数外部,改变父函数内部变量的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值