JavaScript基礎過關第三天
阿新 • • 發佈:2018-07-30
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
- 定義方式
- 函數表達
var f2=function(){//將一個匿名函數給了一個變量
console.log("這是函數表達式");
};//這是一個賦值過程,必須加分號
函數聲明式
function f2(){ console.log("這是函數聲明式"); }
區別
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基礎過關第三天