• 你好javascript day7


    1)作用域

    var a=1;//全局变量
    function addNumber(){
    var a=2;//局部变量
    a++;
    console.log(a,"1");//3 }; console.log(a,"2");//1 addNumber(); console.log(a,"3");//1
    //打印顺序 2 1 3
    当在函数中定义变量时,这个变量的作用范围仅在函数中
    外面调用不到的主要原因是因为a的作用范围仅在函数中,当函数执行完成后a就会自动被销毁
    我们认为定义在函数外面的变量,叫做全局变量
    定义在函数里面的变量,叫做局部变量
     
    当在函数外打印变量,这个变量肯定就是全局变量
    定义的局部变量不会改变全局变量
    我们认为一旦在函数中定义了局部变量,那么这个局部变量名字如果和全局变量名相同
    全局变量将无法直接在函数中使用了,局部变量的优先级高
           var a=3;
            function abc(a){
                // 参数就是局部变量,虽然没有使用var,但是一旦是确定为参数,就相当于
                // 定义了一个局部变量   var a
                console.log(a);//10
                a++;
            }
    
            abc(10);
            console.log(a);//3 */
            var obj={a:1};
            function abc(o){
                // 没有更改局部变量
                // o.a=10;
                // 这里才是真正更改局部变量,更改变量的引用地址
                o={a:10};
    
            }
            abc(obj);
            console.log(obj.a);
            var a=1;
            // 命名函数在代码中定义以后,script被执行时,会自动将函数放在堆中
            // 并且将函数存储在栈中的全局变量,定义函数全局是最为优先,最早的
            // 当代码执行到135行  var a=1时,才开始重新定义变量a,而这个变量a
            // 与栈中的全局函数a重名,因此变量a就会覆盖全局函数a
            function a(a){
                console.log(a);//(2)
                var a=3;
                console.log(a);//(3)
            }
    
            console.log(a);//(1)  1
            a(10);  //1不是一个函数所有报错
            console.log(a);//(4)

    2)回调函数与递归函数

    认识回调函数

           function abc(fn){
                // fn就是回调函数
                fn(3,5);
            }
    
    
            function getSum(a,b){
                console.log(a+b);
            }
    
            abc(getSum); 
           
            // 函数也是对象,当带入参数时
            // 桥接
             function countNumber(fn){
                // return fn(3,5);
                var s=fn(3,5);
                return s;
            }
    
            function getSum(a,b){
                return a+b;
            }
    
            function getMultiplication(a,b){
                return a*b;
            }
    
    
            // 需要计算3+5;
           var s=countNumber(getSum);
           console.log(s);
        //    需要计算3*5;
           var s=countNumber(getMultiplication);
           console.log(s); 
            // 回调函数可以应用在某个事件完成或者某个时间达到再去执行函数
            var i=0;
            // 这是一个方法,定时器,毫秒(单位)
            // setInterval(执行函数,间隔多长时间执行一次)
            // 时间间隔方法,每间隔1000毫秒执行一次方法,
            // 在这里animation函数就是回调函数,每间隔1000毫秒回调执行一次这个函数
          var ids=setInterval(animation,1000);
        //   返回一个值,这个值就是当前定时器的标识id
    
           function animation(){
                i++;
                console.log(i);
                if(i>10){
                    // clearInterval清除定时器,ids就是刚才设置定时器时的返回标识id
                    clearInterval(ids);
                }
           }
    
    
           var i=0;
           var ids=setInterval(animation,1000);
           function animation(){
                i++;
                console.log(i);
                if(i>10){
                    clearInterval(ids);
                }
           }

    认识递归函数

     递归如果没有限制的话就会造成堆栈上限溢出
     递归  自己执行自己
        var obj={
            a:{
                a:{
                    a:{
                        a:{
                            a:null,
                            value:5
                        },
                        value:4
                    },
                    value:3
                },
                value:2
            },
            value:1
        };
    
        // 满足条件进入递归
        function showObj(o){
            console.log(o.value);
            if(o.a) showObj(o.a);
        }
    
        showObj(obj)
    
        // 当希望遍历具备有深度数据结构时,通常使用递归或者while更为方便
        // 当希望遍历具备广度数据结构时,一般使用for循环遍历
        // 遍历  全部每个逐个查看

    3)数组

    数组    数据的组合
     
            数组的新建方式
            字面量创建
            var arr=[4,5,3,6,2,1];
            这种叫构造函数创建
            var  arr1=new Array(4,5,3,6,2,1);
            console.log(arr,arr1);
            如果通过数组的构造函数创建数组,参数仅有1个,且这个参数是正整数,则表示新建
            一个具备该正整数长度的空数组,里面有这个长度的若干空元素
            如果是负数或者小数时,报错
            var arr2=new Array(5);//数组长度为5  没填入值  --》 undefined
            var arr2=new Array(3.5);//错误  必须是正整数
            如果输入的不是数值,是其他类型时,这个数据就会作为该数组的第0个元素,长度为1
            var arr2=new Array("a");//填入一个字符a  长度1
            console.log(arr2[0]);
    长度就是元素的个数
    下标是数组内每个值对应的编号 从零开始
    数组的最大下标等于数组的长度减一  ---》 arr[最大下标]===arr.length-1
            数组的最大下标是数组的长度-1(元素个数-1);
            var arr=[1,2,3,5,,2,3,,5,2];//逗号间为空--》 即填入一个undefined 占一个下标
            var arr=[1,2,3,5,2,3,5,2];
            console.log(arr[4])
            console.log(arr.length);//就是数组的长度,也是元素的个数
            arr[4]=20;
            arr[arr.length-1]=20;
            arr[arr.length]=20;//在数组的最尾部添加一个元素
            console.log(arr);
    arr.length=3;//数组的长度是可以被修改  等于0数组直接清空
    4)对象的引用
            var o1={a:1};
            var o2=o1;
            o2.a++;
            console.log(o1.a); //a=2
            // 我们认为除了数值,字符,布尔值以外的其他对象,是被存储在堆中,并且有一个引用地址
            // 我们是将这个引用地址赋值给变量的,如果将一个变量赋值给另一个变量,就是将这个引用
            // 地址赋值给另一个变量,因此实际这两个变量指向的引用地址完全相同,更改其中一个,就
            // 会引起另一个的改变
           var o1={a:1};
            var o2={a:1};
            console.log(o1===o2);//false
            // 针对对象来说,判断是否相等不是根据内容是否相同,而是根据两个对象的引用地址是否相同
            // 如果使用新的{}产生的对象那就是新的地址
            var prev;
            function prevObj(o){
                if(prev){
                    prev.a=0;
                }
                prev=o;
                prev.a=10;
            }
    
            var o1={};
            var o2={};
            prevObj(o1);
            // 到现在为止prev和o1的引用地址相同
            // o1.a=10;
            prevObj(o2);
            // 到现在为止  o1.a变成0
            // prev重新设置为o2,prev和o2的引用地址相同
            // o2.a=10;

    5)切换图片

    案例:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <style>
          ul {
            list-style: none;
            margin: 0;
            padding: 0;
          }
          li {
            float: left;
            margin-left: 20px;
            text-align: center;
             20px;
            height: 20px;
            border-radius: 50%;
            border: 1px solid #ff0000;
          }
          div {
             400px;
            height: 180px;
            background-size: 100% 100%;
            background-image: url("./img/a.png");
            position: absolute;
            transition: all 1s;
            top: 50px;
          }
        </style>
      </head>
      <body>
        <ul>
          <li id="li1">1</li>
          <li id="li2">2</li>
          <li id="li3">3</li>
          <li id="li4">4</li>
          <li id="li5">5</li>
        </ul>
        <div id="div0"></div>
    
        <script>
          var prevDot, div0;
          init();
          function init() {
            div0 = document.getElementById("div0");
            for (var i = 1; i < 6; i++) {
              var li = document.getElementById("li" + i);
              li.onclick = clickHandler;
            }
            changeDot(document.getElementById("li1"));
          }
    
          function clickHandler() {
            changeDot(this);
            var imgSrc = callBackDiv(this);
            div0.style.backgroundImage = imgSrc;
          }
    
          function changeDot(li) {
            if (prevDot) {
              prevDot.style.backgroundColor = "rgba(0,0,0,0)";
            }
            prevDot = li;
            prevDot.style.backgroundColor = "red";
          }
    
          function callBackDiv(li) {
            if (li.id === "li1") return "url(./img/a.png)";
            if (li.id === "li2") return "url(./img/b.png)";
            if (li.id === "li3") return "url(./img/c.png)";
            if (li.id === "li4") return "url(./img/d.png)";
            if (li.id === "li5") return "url(./img/e.png)";
          }
    
    
    
    
    
          function circleArea(r){
            return 3.1415926*r*r;
          }
    
          var a=circleArea(30);
          console.log(a);
    
    
          function rectArea(w,h){
            return w*h;
          }
    
          var s=rectArea(30,50);
          console.log(s);
        </script>
      </body>
    </html>
  • 相关阅读:
    数与bit
    ARM汇编优化1
    一 *(a+1)与*(&a+1)
    二 *(a+1)多维数组
    三 二维数组取址
    四 sizeof(a)
    永恒之蓝及WannaCry分析
    github使用记录
    三种页面置换算法的C++模拟
    opencv检测图像直线
  • 原文地址:https://www.cnblogs.com/zqm0924/p/12907547.html
Copyright © 2020-2023  润新知