摘要:什么是函數(shù)函數(shù)封裝一項專門任務(wù)的步驟清單的代碼段,起一個名字。程序中提供的一項服務(wù)的步驟說明何時使用函數(shù)當一項任務(wù)需要反復執(zhí)行,但又不希望重復編寫時。何時如何為參數(shù)變量賦值在調(diào)用函數(shù)時,按照參數(shù)定義時的順序和個數(shù),依次傳入?yún)?shù)值。
function
什么是函數(shù): 函數(shù):封裝一項專門任務(wù)的步驟清單的代碼段,起一個名字。(**程序中提供的一項服務(wù)的步驟說明**) 何時使用函數(shù)?當一項任務(wù)需要反復執(zhí)行,但又不希望重復編寫時。(**代碼重用!**) 如何聲明函數(shù):function 任務(wù)名([參數(shù)變量列表]){ 步驟清單代碼段 [return 返回值] }
***函數(shù)名(任務(wù)名): 指向函數(shù)定義的一個變量 函數(shù):封裝函數(shù)定義的引用類型對象 ***聲明時,不執(zhí)行!也不讀取內(nèi)部的代碼! 如何調(diào)用函數(shù)執(zhí)行:任何位置: 函數(shù)名([參數(shù)值列表]); ***調(diào)用時,才讀取內(nèi)部的代碼,執(zhí)行 參數(shù)變量:專門接收要傳入方法中處理的數(shù)據(jù)的變量。 何時需要定義參數(shù):如果一個函數(shù),必須一些數(shù)據(jù)才可正常執(zhí)行,需要幾個數(shù)據(jù),就定義幾個參數(shù)變量。 何時如何為參數(shù)變量賦值:在調(diào)用函數(shù)時,按照參數(shù)定義時的順序和個數(shù),依次傳入?yún)?shù)值。 返回值:函數(shù)的執(zhí)行結(jié)果 何時需要返回值:只要函數(shù)需要有明確的執(zhí)行結(jié)果時 如果調(diào)用者需要獲得明確的執(zhí)行結(jié)果時 如何定義返回值: 函數(shù)定義內(nèi)部,一般函數(shù)體結(jié)尾 return 值; 調(diào)用者何時如何獲得返回值: 1. 一個有返回值的函數(shù)調(diào)用,可以當做一個值使用 2. 調(diào)用時,可使用變量保存住函數(shù)調(diào)用的返回值
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. 局部作用域:在函數(shù)調(diào)用時才創(chuàng)建的作用域 局部變量:2種:1. 參數(shù)變量 2. 在函數(shù)定義中var的變量 ***僅在函數(shù)調(diào)用時,動態(tài)創(chuàng)建 調(diào)用時,如果局部有,就不用全局的! ***調(diào)用后,隨局部作用域一同銷毀
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聲明提前
聲明提前:正式開始執(zhí)行程序前,先將var聲明的變量和function聲明的函數(shù),提前到*當前作用域*頂部,集中聲明,賦值留在原地。
var n=100; function fun(){ var n;//undifend console.log(n); n=99; console.log(n); } fun();//99 console.log(n);
按值傳遞:兩變量間賦值,或?qū)⒆兞孔鳛楹瘮?shù)的參數(shù)傳遞時都僅將變量中的值,復制一個副本給對方!
var n=100; var m=n; n++; console.log(m);//100
全局函數(shù):ES標準中規(guī)定的,由瀏覽器廠商實現(xiàn)的,不需要任何對象前綴就可直接訪問的函數(shù).
比如:parseInt/Float(str),isNaN(n) 比如:alert() prompt()——BOM分支結(jié)構(gòu)
分支結(jié)構(gòu):
程序結(jié)構(gòu):3種: 順序結(jié)構(gòu):默認程序都是自上向下逐行順序執(zhí)行 分支結(jié)構(gòu):根據(jù)不同的條件,選擇執(zhí)行不同的操作 操作的復雜程度 循環(huán)結(jié)構(gòu):讓程序反復執(zhí)行同一代碼段。 分支結(jié)構(gòu):3種情況: 1. 一個條件,一件事:滿足條件就執(zhí)行,(不滿足就什么都不做) 短路邏輯:條件&&(操作1,操作2...) 何時使用:操作非常簡單時 if結(jié)構(gòu):如果 滿足*條件*, 就執(zhí)行代碼段 if(條件){ 滿足條件時,才能執(zhí)行的代碼段 }
var price=parseFloat(prompt("請輸入單價")); var count=parseFloat(prompt("輸入數(shù)量")); var money=parseFloat(prompt("輸入收款金額")); var total=price*count; if(total>=500){ total*=0.8; } var change=money-total; console.log("應收:"+total+";找零"+change);
2. 一個條件,兩件事:二選一執(zhí)行! 如果 滿足*條件*,就執(zhí)行操作1,否則,執(zhí)行操作2 三目運算:條件?操作1:操作2; 何時使用:操作1和操作2,都非常簡單時 if...else結(jié)構(gòu): if(條件){ 滿足條件才執(zhí)行的代碼段 }else{//否則 不滿足條件才執(zhí)行的代碼段 }
var price=parseFloat(prompt("請輸入單價")); var count=parseFloat(prompt("輸入數(shù)量")); 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); }
多個條件,多件事,多選一執(zhí)行!(有可能都不執(zhí)行)
如果 滿足 條件1 就執(zhí)行 操作1
否則,如果滿足 條件2 就執(zhí)行 操作2
... ...
[否則,默認操作]
三目:條件1?操作1:
條件2?操作2: ...: 默認操作——不可省略
if...else if結(jié)構(gòu):
if(條件1){ 滿足條件1才執(zhí)行的操作1; }else if(條件2){ 滿足條件2才執(zhí)行的操作2; }else if(...){ ... }[else{ 如果以上任何條件都不滿足,則執(zhí)行默認操作 }]
if (score<0||score>100) { console.log("無效分數(shù)"); } 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結(jié)構(gòu):
何時使用:當條件都是全等比較時,才可用switch結(jié)構(gòu)
switch(表達式){ //1. 計算表達式的結(jié)果
//用表達式的值和每個case后的值做**全等**比較 //碰到一個全等的case值,則進入該case開始執(zhí)行
//并默認以此觸發(fā)之后所有case的執(zhí)行
case 值1:
滿足值1才執(zhí)行的代碼段1; case 值2: 滿足值2才執(zhí)行的代碼段2; ...: ... ... default: 如果前邊的值都不滿足,執(zhí)行默認代碼段
}
switch(parseInt(prompt("請按鍵:"))){ case 1: console.log("查詢進行中....."); case 2: console.log("取款中......"); case 3: console.log("轉(zhuǎn)賬進行中...."); case 0: console.log("歡迎下次再來!"); default: console.lop("無效按鍵"); }
break: 中止當前結(jié)構(gòu)的執(zhí)行,并跳出結(jié)構(gòu)。
位置:在每個case之間
何時可以省略部分break:上下兩個case希望執(zhí)行相同代碼時
switch(parseInt(prompt("請按鍵:"))){ case 1: console.log("查詢進行中....."); break; case 2: case 3: console.log("系統(tǒng)維護中...."); break; case 0: console.log("歡迎下次再來!"); break; default: console.log("無效按鍵"); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81261.html
說明1、源碼結(jié)構(gòu)通覽,簡單注釋說明2、通過調(diào)用方法講解核心代碼邏輯 一、源碼的結(jié)構(gòu) 為了方便比對源碼,按源碼的結(jié)構(gòu)順序展示。underscore是個輕量級的工具庫,大部分代碼是實現(xiàn)特定功能以函數(shù)的形式存在,本身會比較簡單,沒對方法具體說明,可直接參考underscore中文文檔 (function() { var root = this; var previousUnderscore = ...
摘要:定義這是類型簽名的表述。實際上對應著,只是在里作為立即量傳入,在和的返回值中作為閉包引用傳入。同時根據(jù)看出返回值是用回調(diào)返回值的。的輸出是的包裹。的方法借助了閉包引用額外輸入了,而輸入的函數(shù)輸入是輸出則是借助實現(xiàn)的。 轉(zhuǎn)載請注明出處: http://hai.li/2017/03/27/prom... 背景 上篇文章 函數(shù)式JS: 一種continuation monad推導 得到了一個...
摘要:設(shè)計為單線程設(shè)計為單線程還是跟他的用途有關(guān)試想一下如果設(shè)計為多線程那么同時修改和刪除同一個瀏覽器又該如何執(zhí)行需要異步我在執(zhí)行但用戶不知道你好啊上圖例子循環(huán)耗時會很久這意味著用戶得不到你好啊的響應就會下意識會認為瀏覽器卡死了所以必須要有異步通 js設(shè)計為單線程 js設(shè)計為單線程還是跟他的用途有關(guān) 試想一下 如果js設(shè)計為多線程 那么同時修改和刪除同一個dom 瀏覽器又該如何執(zhí)行? sh...
摘要:屬性對性能影響非常嚴重,不建議使用。當你創(chuàng)建函數(shù)時,會為這個函數(shù)自動添加屬性。構(gòu)造函數(shù)原型的默認指向自身。所有對象均從繼承屬性。結(jié)果見下圖普通對象是構(gòu)造函數(shù)的實例,所以普通對象的原型是。總結(jié)和其它函數(shù)由產(chǎn)生,的是他自己。 _proto_ 每個對象都有一個__proto__(前后各兩個下劃線)屬性來標識自己所繼承的原型對象。__proto__屬性對性能影響非常嚴重,不建議使用。 pro...
摘要:從出來接著我們看大法,打印一下感覺之前所以的對象都放在了一個合集里,給人而全的感覺里面主要含有一個對象,,輸出的,等給每次打包一個值,代表唯一性天啊 從compilation出來接著我們看 const stats = new Stats(compilation); Stats.js log大法,打印一下 stats let Stats = { compilation:{ ...
閱讀 2096·2021-11-23 09:51
閱讀 2839·2021-11-22 15:35
閱讀 2937·2019-08-30 15:53
閱讀 1038·2019-08-30 14:04
閱讀 3276·2019-08-29 12:39
閱讀 1802·2019-08-28 17:57
閱讀 1086·2019-08-26 13:39
閱讀 551·2019-08-26 13:34