什麼是函數: 函數:封裝一項專門任務的步驟清單的代碼段,起一個名字。(**程序中提供的一項服務的步驟說明**) 什麼時候使用函數?當一項任務須要反覆執行,但又不但願重複編寫時。(**代碼重用!**) 如何聲明函數:function 任務名([參數變量列表]){ 步驟清單代碼段 [return 返回值] }
***函數名(任務名): 指向函數定義的一個變量 函數:封裝函數定義的引用類型對象 ***聲明時,不執行!也不讀取內部的代碼! 如何調用函數執行:任何位置: 函數名([參數值列表]); ***調用時,纔讀取內部的代碼,執行 參數變量:專門接收要傳入方法中處理的數據的變量。 什麼時候須要定義參數:若是一個函數,必須一些數據纔可正常執行,須要幾個數據,就定義幾個參數變量。 什麼時候如何爲參數變量賦值:在調用函數時,按照參數定義時的順序和個數,依次傳入參數值。 返回值:函數的執行結果 什麼時候須要返回值:只要函數須要有明確的執行結果時 若是調用者須要得到明確的執行結果時 如何定義返回值: 函數定義內部,通常函數體結尾 return 值; 調用者什麼時候如何得到返回值: 1. 一個有返回值的函數調用,能夠當作一個值使用 2. 調用時,可以使用變量保存住函數調用的返回值
function buy(what,moeny){ console.log("Step1:取盒飯"); console.log("Step2:去食堂"); console.log("Step3:打飯"+what); moeny-=3; console.log("Step4:扣款3元,餘額:"+moeny); console.log("Step5:回宿舍"); return "香噴噴的"+what; } console.log(buy("宮保雞丁",10));
***變量做用域:一個變量的可用範圍 有2種:1. 全局做用域:window 全局變量——放在全局做用域(window)中的變量 可在程序的任何位置訪問全局變量 2. 局部做用域:在函數調用時才建立的做用域 局部變量:2種:1. 參數變量 2. 在函數定義中var的變量 ***僅在函數調用時,動態建立 調用時,若是局部有,就不用全局的! ***調用後,隨局部做用域一同銷燬
var kl=10; function rose(){ var kl=5; kl--; console.log(kl); } function jack() { kl--; console.log(kl); } console.log(kl);//全局kl=10 rose();//4 console.log(kl);//全局kl=10 jack();//9 console.log(kl);//全局kl=9
聲明提早:正式開始執行程序前,先將var聲明的變量和function聲明的函數,提早到*當前做用域*頂部,集中聲明,賦值留在原地。
var n=100; function fun(){ var n;//undifend console.log(n); n=99; console.log(n); } fun();//99 console.log(n);
按值傳遞:兩變量間賦值,或將變量做爲函數的參數傳遞時都僅將變量中的值,複製一個副本給對方!瀏覽器
var n=100; var m=n; n++; console.log(m);//100
全局函數:ES標準中規定的,由瀏覽器廠商實現的,不須要任何對象前綴就可直接訪問的函數.函數
好比:parseInt/Float(str),isNaN(n) 好比:alert() prompt()——BOM
分支結構:code
程序結構:3種: 順序結構:默認程序都是自上向下逐行順序執行 分支結構:根據不一樣的條件,選擇執行不一樣的操做 操做的複雜程度 循環結構:讓程序反覆執行同一代碼段。 分支結構:3種狀況: 1. 一個條件,一件事:知足條件就執行,(不知足就什麼都不作) 短路邏輯:條件&&(操做1,操做2...) 什麼時候使用:操做很是簡單時 if結構:若是 知足*條件*, 就執行代碼段 if(條件){ 知足條件時,才能執行的代碼段 }
var price=parseFloat(prompt("請輸入單價")); var count=parseFloat(prompt("輸入數量")); var money=parseFloat(prompt("輸入收款金額")); var total=price*count; if(total>=500){ total*=0.8; } var change=money-total; console.log("應收:"+total+";找零"+change);
2. 一個條件,兩件事:二選一執行! 若是 知足*條件*,就執行操做1,不然,執行操做2 三目運算:條件?操做1:操做2; 什麼時候使用:操做1和操做2,都很是簡單時 if...else結構: if(條件){ 知足條件才執行的代碼段 }else{//不然 不知足條件才執行的代碼段 }
var price=parseFloat(prompt("請輸入單價")); var count=parseFloat(prompt("輸入數量")); var money=parseFloat(prompt("輸入收款金額")); var total=price*count; if(money>=total){ var change=money-total; console.log("應收:"+total+";找零"+change); }else{ var change=total-moeny; console.log("應收:"+total+";還差"+change); }
多個條件,多件事,多選一執行!(有可能都不執行)對象
若是 知足 條件1 就執行 操做1
不然,若是知足 條件2 就執行 操做2
... ...作用域
[不然,默認操做]
三目:條件1?操做1:it
條件2?操做2: ...: 默認操做——不可省略
if...else if結構:io
if(條件1){ 知足條件1才執行的操做1; }else if(條件2){ 知足條件2才執行的操做2; }else if(...){ ... }[else{ 若是以上任何條件都不知足,則執行默認操做 }]
if (score<0||score>100) { console.log("無效分數"); } else if(score>=90){ console.log("A"); } else if (score>=80) { console.log("B"); } else if (score>=70) { console.log("C"); } else { console.log("D"); }
switch...case結構:
什麼時候使用:當條件都是全等比較時,纔可用switch結構
switch(表達式){ //1. 計算表達式的結果console
//用表達式的值和每一個case後的值作**全等**比較 //碰到一個全等的case值,則進入該case開始執行
//並默認以此觸發以後全部case的執行
case 值1:function
知足值1才執行的代碼段1; case 值2: 知足值2才執行的代碼段2; ...: ... ... default: 若是前邊的值都不知足,執行默認代碼段
}變量
switch(parseInt(prompt("請按鍵:"))){ case 1: console.log("查詢進行中....."); case 2: console.log("取款中......"); case 3: console.log("轉帳進行中...."); case 0: console.log("歡迎下次再來!"); default: console.lop("無效按鍵"); }
break: 停止當前結構的執行,並跳出結構。
位置:在每一個case之間
什麼時候能夠省略部分break:上下兩個case但願執行相同代碼時
switch(parseInt(prompt("請按鍵:"))){ case 1: console.log("查詢進行中....."); break; case 2: case 3: console.log("系統維護中...."); break; case 0: console.log("歡迎下次再來!"); break; default: console.log("無效按鍵"); }