第一章----二.作用域与回调函数

作用域

  1. 在函数中使用var定义的变量或者函数的形参,都是局部变量,也就是说这个变量只能作用域函数内部,函数运行完成后这个变量会被销毁,在函数外是不存在该变量的

  2. 使用var定义在函数外的变量,可以在函数内被调用,定义在函数外的变量叫做全局变量,函数运行完成后不会销毁全局变量

  3. 函数内也可以定义函数,所以函数内定义的函数也是局部函数,只能在函数内调用

  4. 全局变量

    var a=1;
        function fn(){
            a++;
        }
        fn();
        console.log(a);
    
  5. 局部变量

     function fn(){
            var a=1;
            a++;
            return a;
        }
         var b=fn();
        console.log(b);
    

    参数也是局部变量

      function fn(a){
                a++;
        }
            var b=1;
            这里是把b的值传入,并不是改变了b
            fn(b);
            函数参数在函数外是无法获取的
            console.log(b);
    
  6. 在函数中也和全局变量的变量一样,当函数被调用时,函数内的局部变量就会被预解析,在栈中开辟一个空间,并起名为这个局部变量名称,但是没有赋值,等运行到赋值时才赋值,栈中开辟空间的地方和全局变量开辟空间的地方不同,全局变量开辟空间实在最外层,局部变量开辟的栈中空间时从属于当前这个函数的内部空间

  7. 两个函数中的局部变量是没有任何关系的

      function fn(){
        var a=1;
        a++;
         }
         function fn1(){
        var a=2;
        a++;
    }
     function fn(){
        console.log(a);//undefined
        var a=3;
    }
    fn();
     function fn(){
        console.log(a);//报错
    }
    fn();
    
  8. 如果函数中有与全局变量同名的局部变量时,这个函数内所有的变量都是局部变量,无法调用到全局变量

      var a=1;
        function a(a){
        if(a===undefined){
            a=5;
        }else if(a===2){
            a++;
        }else{
            var a=10;
        }
        console.log(a);
    }
        a(2);
    
  9. 这里a是全局变量,首先预解析时,他就是一个函数a,但是当执行到a=1时,就会覆盖函数,于是a=1,a(1) 因为a不是函数,而是1,这时候就会报错a不是一个函数

     var a;  
        function a(a){
        if(a===undefined){
            a=5;
        }else if(a===2){
            a++;
        }else{
            var a=10;
        }
        console.log(a);
        }
    a(2);
        a=2;
    
  10. 局部变量因为定义在函数内,也就是说只有函数执行时才会重新定义并且使用,函数运行完成后会被销毁隐居局部变量无法长期保存下来,以后调用时无法调用的,如果希望以后也可以使用这个变量,需要把这个变量return返回函数储存为全局变量

回调函数和递归

回调函数

定义:在一个函数中,传入的实参是另外一个,在这个函数中执行实参的这个函数

在1000毫秒后仅执行一次这个回调函数

 setTimeout(function(){
    },1000);

每间隔1000毫秒执行一次这个回调函数

 setInterval(function(){
console.log("aaa");
        },1000);

使用回调函数的目的,是为了解决先执行完某个操作运算之后在执行当前这个函数,或者在触发某个内容时再执行这个函数

递归

function fn(){
      fn();
    }
    fn();

定义:当前函数自身内部执行自己,不断的重复

Maximum call stack size exceeded 堆栈上限溢

递归需要一个条件来结束递归,或者在不满足条件时不进入递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩逸客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值