DAY06.笔记

159 阅读3分钟

一、短路赋值

        var n = 1||2;  // n = (1 || 2)  n = 1  因为或运算遇到真就不会继续往下走所以n被赋予值1
        var n = 0||3; //n = (0||3) n = 3  0 为flase继续往下走遇到3为flasen被赋值3
        var n = 1&&2; //n = (1&&2) n = 2 与运算遇到假就会短路。1为真 继续向下 所以n = 2
        var n = 0&&3; //n = (0&&3) n = 0 0为假 所以直接给n赋值0

二、变量的作用域

  • 变量是有作用域的
  • 分类
  1. 全局作用域 -- 全局变量 全局变量即在函数外声明的变量没有var的变量

2.局部变量 -- 局部变量

局部变量就是在函数内部声明的变量,只能在函数内部和函数被调用时使用,调用结束后销毁

  • 变量可以重复声明,变量也可以不声明直接赋值,当函数内部的变量和外部的变量名字相同的时候优先使用自己的
  • 在函数内没有var但直接赋值,此时会变成全局变量,但是要注意的是,若函数没有被调用此时这个全局变量也无法被访问
  • 作用域是相对的

三、形参

  • 形参本质上是一个局部变量,可以接收实参。和实参不对等,所以可以实现短路赋值法。
        var a;
        console.log(a) //undefined 变量已经声明,但是没有被赋值
        // 形参的本质上是局部变量
  • 函数嵌套下的变量的作用域 优先找自己的,自己的找不到就向上一级查找,一只找到script为止,一直找不到就报错

四、js的预编译

  • js执行代码分为两个阶段
  1. 预编译阶段 首先会找到所有的var 声明的变量 然后找所有的具名函数
<script>
        // 你看到的代码
        function a(){
            console.log(3);
        }

        console.log(a);
        a = 1;
        console.log(a);
        function a(){
            console.log(2);
        }
        console.log(a);
        a = 3
        console.log(a);
        function a(){
            console.log(3);
        }
        console.log(a);
        a()


        // 实际上
        // 被覆盖
        // function a(){
        //     console.log(3)  
        // }
         // 被覆盖
        // function a(){
        //     console.log(2)  
        // }
        function a(){
            console.log(3);
        }

        console.log(a); //  打印函数
        a = 1;
        console.log(a);  // 1
        console.log(a);
        a = 3
        console.log(a); //3
        console.log(a); 
        a() //报错 此时a已经不是函数

    </script>

五、函数

  • 函数也是一种数据类型!function是引用数据类型,函数可以被变量存储
  • 匿名函数:一次性函数,是一种立即执行的函数
  1. 匿名函数的自调用
      !function(n){ //函数前加一个 + ! 或者 ~
            console.log(n)
        }("33") //后括号填写参数

2.一些系统函数

        prompt() //有输入框的弹窗
        confirm() //确定弹窗 有返回值 boolean 
        eval() //能计算的时候就计算,不能计算就报错
  1. 事件处理函数是后面才执行,也就是在点击后才执行。说明代码并不是永远自上而下执行的,影响到预编译。

六、递归函数

  • 递归:传递与回归,自己调用自己
        // 当传入的数为偶数时 调用函数求和 1/2 + 1/4 +。。。。+ 1/n
        // 当数为奇数时候,1 + 1/3 +.....+ 1/n
        // 不管是奇数偶数,计算都是1/n + 第n -2个数的和

        function sum(n){
 
            if(n == 1){
                return 1;
            }
            if(n == 2){
                return 1/2;
            }
            return 1/n + sum(n-2);
        }

        console.log(sum(2)) 

七.字符串的拼接

  1. 当返回很多个值的时候,使用字符串的拼接
// 作用:封装一个能生成规定位数验证码的函数
// 参数:x 规定几位数 
// 返回值:string 一个规定位数验证码
function code(x){
    // 短路赋值:当调用函数时x若没被赋值,触发短路赋值x的值为4
    x = x || 4;
    // 字符串的拼接
    var n = "";
    for(i = 0 ; i < x ; i++){
        var j = suiji(0,9)
        n += j
    }
    return n
    
}