1. 程式人生 > >JavaScript基礎過關第三天

JavaScript基礎過關第三天

ima 註意 考題 冒泡排序 聲明式 數組的使用 第三天 urn 函數

JavaScript基礎過關第三天

數組

  • 數組倒序

    • 思路:第一個與最後一個交換,第二個與倒數第二個交換,以此類推,交換次數等於長度除以2的商。
    var array1=[10,20,30,40,50];
     for(var i=0;i<array1.length/2;i++){
         var temp=array1[i];
         array1[i]=array1[array1.length-1-i];
         array1[array1.length-1-i]=temp;
     }
     console.log(array1);
  • 冒泡排序

    • 思路:通過兩兩比較來交換順序
    • 圖示:
    • 技術分享圖片

    • 比較輪數:長度-1
    • 每一輪的比較次數:長度-1-輪數

      var array=[10,0,30,60,35];
      for(var i=0;i<array.length-1;i++){//輪數
          for(var j=0;j<array.length-1-i;j++){//每一輪比較的次數
              if(array[j]>array[j+1]){//從小到大的順序
                  var temp=array[j];
                  array[j]=array[j+1];
                  array[j+1]=temp;
              }
          }
      }
      console.log(array);

函數

  • arguments偽數組的使用
function f1(){
    //好處,不用再定義形參從而限制形參個數
    var sum=0;
    for(var i=0;i<arguments.length;i++){
        sum +=arguments[i];
    }
    return sum;
}
console.log(f1(10,20,30));//60
  • 定義方式
  1. 函數表達
var f2=function(){//將一個匿名函數給了一個變量
    console.log("這是函數表達式");
};//這是一個賦值過程,必須加分號
  1. 函數聲明式

    function f2(){
        console.log("這是函數聲明式");
    }
  2. 區別

    function f1(){
        console.log("1");
    }
    f1();
    function f1(){
        console.log("2");
    }//只有函數聲明式會提前聲明
    f1();

    相當於

    function f1(){
        console.log("1");
    }
    function f1(){
        console.log("2");
    }
    f1();
    f1();

    兩次調用結果都會輸出2

    f1=function(){
        console.log("1");
    }
    f1();
    f1=function(){
        console.log("2");//函數表達式不會提前聲明,所以按照順序輸出
    }
    f1();

    先輸出1,再輸出2

  • 函數作為參數
function f1(fn){
    fn();
}
function f2(){
    console.log("這是函數作為參數的實例");
}
f1(f2);//註意這裏傳入函數名稱,而不是函數的返回值(f2())
  • 函數作為返回值

    function f2(){
          return function f3(){
              console.log("函數作為返回值");
          }
      }
    var f1=f2();//f1接收了一個函數
    f1();//調用f1
  • 預解析

    變量和函數的聲明會提前(賦值不提前),提前到當前作用域的調用者的前面

    f1();
    function f1(){
        console.log(num1);
        var num1=10;
    }

    輸出:undefined

    如果去掉“var num1=10”,會報錯(未聲明)

    相當於:

    function f1(){
        var num1;
        console.log(num1);
    }
    f1();

    f1();
    var num1=20;
    function f1(){
        console.log(num1);
        var num1=10;
    }//在f1內部也提前了變量聲明,同樣沒有提前變量賦值

    輸出:undefined

    相當於:

    var num1=20;
    function f1(){
        var num1;
        console.log(num1);
    }
    f1();

    f1();
    var num1=20;
    function f1(){
        console.log(num1);
    }//變量聲明(num1)和函數聲明(f1)提前,但是變量賦值沒有提前

    輸出:undefined


var num1=20;
function f1(){
    console.log(num1);
}
f1();//不存在提前,順序調用

? 輸出:20


  • 思考題

    f1();
    console.log(a);
    console.log(b);
    console.log(c);
    function f1(){
        var a=b=c=9;
        console.log(a);
      console.log(b);
      console.log(c);
    }

    思考......

結果:

上面:a報錯 b=9 c=9

下面: a=9 b=9 c=9

相當於:

function f1(){
    var a=9;
    b=9;//b與c前面沒有var,所以他們是隱式全局變量
    c=9;
    console.log(a);//9
    console.log(b);//9
    console.log(c);//9
}
f1();
console.log(a);//報錯(a為局部變量)
console.log(b);//9
console.log(c);//9

JavaScript基礎過關第三天