JavaScript複習筆記(二)函式與分支結構
1、函式: 封裝一個專門任務的步驟清單的程式碼段叫做函式
使用函式: 宣告 定義 和呼叫
2、宣告和定義函式的幾種方法
函式宣告:function sum(a,b){ return a+b}
函式表示式var sum = function(a,b){return a+b}
Function建構函式(從技術角度講,這是一個函式表示式)
var sum = new Function('a','b','return a+b')//不推薦使用,影響函式解析效能
3、函式宣告提前:在程式執行前或函式被呼叫前,將function宣告的函式提前到*當前作用域*的頂部集中建立
當使用function sum(a,b){ return a+b}時,整體全部提前,因為這個式子叫做函式宣告
當使用var sum = function(a,b){return a+b}時,僅 var sum提前到當前作用域的頂部,
sum = function(a,b){return a+b}留在原地
4、①如何呼叫函式:[var 返回值=]函式名([引數值列表]);函式只有呼叫時才執行!
反覆呼叫,會反覆執行相同操作!
②引數
引數變數:function 函式名(形參1,形參2,...)
傳遞引數值:呼叫時: 函式名(實參1,實參2,...)
一般值的個數和順序,應與宣告時的引數列表一致
③返回值:方法呼叫後,返回的執行結果!——1個數據
函式體中:return 要返回的資料;
函式僅負責返回值,不負責儲存返回值!
如何獲得返回值:呼叫時:var 變數=函式名();
5、變數與變數作用域
1)變數作用域:一個變數的可用範圍
js中2種作用域:
全域性作用域:一個變數可以在程式的任何位置被訪問。
函式作用域:一個變數僅能在函式呼叫時,內部被訪問
2)js中2種變數:
①全域性變數:定義在全域性作用域中的變數
1. 直接在任何函式外宣告的變數,全域性變數都屬於window——全域性物件
2. 無論在任何(包括函式內)位置,為從未宣告過的變數賦值時,自動在全域性建立同名全域性變數!
② 區域性變數:定義在函式作用域中的變數
1. 在函式定義內部宣告的變數
2. 引數變數天生就是區域性變數
*在函式外的for迴圈中定義的變數也屬於全域性變數*
6、 函式的定義和呼叫過程:
① 宣告和定義函式時:
window中建立了函式名變數,window外建立了函式定義的物件-->封裝函式的定義
函式名變數中儲存了指向函式物件的地址
② 呼叫時,建立區域性變數:內部宣告的變數和引數變數
③ 呼叫過程中,如果區域性有,就不用全域性的, 如果區域性沒有,才會用全域性的
如果全域性也沒有,則會報錯!
④ 呼叫結束後,釋放所有區域性變數!
7、JavaScript全域性函式
8、分支結構1:if else
程式結構3大類:
順序:程式預設都是從上向下逐行執行
分支:根據條件判斷的結果,有選擇的執行不同程式碼段
迴圈:程式可以反覆執行同一程式碼段,到達臨界時退出
①if結構: 1件事 滿足條件就執行,否則不執行
語法:if(條件){
滿足條件才執行的程式碼段
}
②if...else...結構: 2件事 滿足條件執行if中的程式碼段,不滿足條件執行else中程式碼段
語法: if(條件){
滿足條件才執行的程式碼段
}else{
不滿足條件才執行的程式碼段
}
③else if結構:多件事,根據條件,多選*一*執行!
語法:if(條件1){
滿足條件1才執行的程式碼段1
}else if(條件2){
... ...
}[else{
萬一之前所有條件都不滿足,才執行預設程式碼段 }]
④ 分支結構 與 三目/短路 效能比較
如果只是返回值-->三目/短路 如果操作複雜-->分支結構
9、分支結構2:switch case 根據不同條件執行不同的程式碼段
用switch中的表示式的值和case中的值做*全等*比較,case 後面只能跟一個確定值
①語法:switch (表示式){
case 值1:
程式碼段1(break);
case 值2:
程式碼段2(break);
...
[default:
預設程式碼段;]
}
break: 停止當前結構的執行,並跳出當前結構,如果想要正常執行switch case結構,就必須在每個程式碼段結束時加上break
② switch 與 else if比較
switch: 只能做全等比較,條件是全等比較時,首選switch case
else if: 定義條件靈活,常用,可完全替代switch
③案例: var a=3;
switch(a){
case 2:
console.log("a=2");
case 3:
console.log("a=3");
case 4:
console.log("a=4");
default: // 輸出結果是: a=3 a=4 都不是
console.log("都不是"); // 原因:沒有寫break,導致程式在跳轉到對應的
} //程式碼塊後,無法停止,只能一直執行,直到switch結束
10、迴圈結構:讓程式反覆執行一段程式碼段,只有達到臨界條件時,才停止迴圈
①迴圈3要素:
1. 迴圈條件:繼續迴圈的條件:迴圈次數<6
2. 迴圈變數:在迴圈條件中,用作比較的變數:迴圈次數
迴圈變數一般會向著不滿足迴圈條件的趨勢不斷變化
3. 迴圈體:反覆執行的程式碼段
②while迴圈:
語法:var 迴圈變數=初值;
while(迴圈條件){
迴圈體;
迭代變化迴圈變數;
}
③do while迴圈:
語法:var 迴圈變數=初值;
do{
迴圈體;
迭代變化迴圈變數;
}while(迴圈條件);
④while與do while差別:
當第一次條件滿足時,while和do while完全一樣!
當第一次條件就不滿足時, do while:至少會執行一次, while: 一次都不執行!
用do while代替while的場景:哪怕第一次條件都不滿足,至少也能執行一次
⑤for迴圈:
語法:
for(var 迴圈變數=初值;迴圈條件;迭代變化迴圈變數){迴圈體;}
何時使用:只要迴圈變數的變化規律固定!優先選擇for迴圈
⑥for 、 while 和 do while 的本質
四大要素編號 1、var 迴圈變數=初值,2、迴圈條件,3、迭代變化迴圈變數4、迴圈體
for結構圖 for(1;2;3){4}
while結構圖 1 while(2){4;3}
do while結構圖 1 do{4;3}while(2)
所以for 、while 和 do while的本質都是相同的,都由四要素組成,都可相互替代
⑦退出迴圈
退出本輪迴圈continue: 結束本輪迴圈,繼續下一輪迴圈
continue一般都可以使用否定條件代替!
退出迴圈結構:2種方式:
1. 自然退出:不滿足迴圈條件時,自動退出迴圈
2. 手動退出:程式設計師在迴圈體中用break強行退出迴圈