Js04天---函數(shù)

函數(shù)具有封裝以及復(fù)用的特點(diǎn)

function,是被設(shè)計(jì)為執(zhí)行特定任務(wù)的代碼塊
函數(shù)可以把具有相同或相似邏輯的代碼“包裹”起來(lái),通過(guò)函數(shù)調(diào)用執(zhí)行這些被“包裹”的代碼邏輯,這么做的優(yōu)勢(shì)是有利于精簡(jiǎn)代碼方便復(fù)用宋雏。
函數(shù)聲明的語(yǔ)法:
function 函數(shù)名 () {
函數(shù)體代碼塊
(函數(shù)的功能代碼都要寫在函數(shù)體當(dāng)中。)
}

注意:函數(shù)聲明后會(huì)被自動(dòng)放到script標(biāo)簽的最上方
函數(shù)名的命名規(guī)則:

函數(shù)名命名規(guī)范
和變量命名基本一致
盡量小駝峰式命名法
前綴應(yīng)該為動(dòng)詞
命名建議:常用動(dòng)詞約定

命名了函數(shù)怎么去調(diào)用呢务豺?
函數(shù)名()磨总;即可調(diào)用函數(shù)
命名了函數(shù)不調(diào)用函數(shù)是看不到效果的,必須要調(diào)用函數(shù)才能看到函數(shù)的運(yùn)行結(jié)果笼沥。

函數(shù)傳參

若函數(shù)完成功能需要調(diào)用者傳入數(shù)據(jù)蚪燕,那么就需要用有參數(shù)的函數(shù)
這樣可以極大提高函數(shù)的靈活性
參數(shù)寫在()內(nèi),多個(gè)參數(shù)間要用英文逗號(hào)隔開

形參: 聲明函數(shù)的時(shí)候奔浅,在小括號(hào)內(nèi)部定義的變量馆纳,實(shí)際執(zhí)行效果,相當(dāng)于聲明了變量但變量沒(méi)賦值

實(shí)參: 函數(shù)執(zhí)行的時(shí)候汹桦,在小括號(hào)內(nèi)部傳遞的數(shù)據(jù)鲁驶,相當(dāng)于執(zhí)行了賦值操作

怎么樣讓函數(shù)傳參呢?

    let sum = 0;
    function getSum(a, b) {//此處的a舞骆、b分別為參數(shù)一钥弯,參數(shù)二
      // 開始數(shù)設(shè)置為a,循環(huán)次數(shù)設(shè)置為b
      for (let i = a; i <= b; i++) {
        sum += i;
      }
      document.write(sum)
    }
    getSum(6, 300)//此處把a(bǔ)=6督禽,b=300傳入函數(shù)中了
邏輯中斷淘这,取默認(rèn)值的技巧
    function getSum(x, y) {
      // 邏輯中斷: 邏輯或的技巧---取默認(rèn)值
      // 1. 當(dāng) y 沒(méi)傳實(shí)參時(shí)需频, 默認(rèn)值為 undefined
      // 2. undefined || 0 ;   前為邏輯假岂膳,返回后面的值 0
      // 3. 相當(dāng)于 y = 0 ; 設(shè)置了默認(rèn)值
      x = x || 0;
      y = y || 0;
      document.write(x + y);
    }
    getSum(1);

案例:求學(xué)生總分

let scores = [231, 4, 235, 3, 6, 456, 5, 7];
    let scores2 = [1, 44, 235, 32, 6, 124, 512, 7];
    let scores3 = [155, 44, 28, 32, 62, 2, 512, 57];
    function getTotalScore(studentList) {
      let total = 0;
      for (let i = 0; i < studentList.length; i++) {
        total += studentList[i];
      }
      document.write(total);
      document.write("</br>");
    }
    getTotalScore(scores);
    getTotalScore(scores2);
    getTotalScore(scores3);
函數(shù)返回值

有返回值函數(shù)的概念:
當(dāng)調(diào)用某個(gè)函數(shù)砰蠢,這個(gè)函數(shù)會(huì)返回一個(gè)結(jié)果出來(lái),這就是有返回值的函數(shù)
用return返回?cái)?shù)據(jù)
當(dāng)函數(shù)需要返回?cái)?shù)據(jù)出去時(shí),用return關(guān)鍵字
語(yǔ)法:return 數(shù)據(jù)玖院;
細(xì)節(jié)注意點(diǎn):
1.在函數(shù)體中使用 return 關(guān)鍵字能將內(nèi)部的執(zhí)行結(jié)果交給函數(shù)外部使用
2.函數(shù)內(nèi)部只能運(yùn)行到 1 次 return菠红,并且 return 后面代碼不會(huì)再被執(zhí)行,所以 return 后面的數(shù)據(jù)不要換行寫
3.return會(huì)立即結(jié)束當(dāng)前函數(shù)
4.函數(shù)可以沒(méi)有 return难菌,這種情況函數(shù)默認(rèn)返回值為 undefined
return案例:

    // 任意兩個(gè)數(shù)比較最大值
    // 因?yàn)槭侨我鈨蓚€(gè)數(shù)试溯,有動(dòng)態(tài)值,應(yīng)該聲明兩個(gè)形參(可變的)
    function getMax(x, y) {
      // 用if判斷x郊酒,y的值
      if (x > y) {
        // 如果x大于y則返回x的值
        return x;
      } else {
        // 否則返回y的值
        return y;
      }
    }
    console.log(getMax(5, 10));//10
    console.log(getMax(20, 11));//20
    console.log(getMax(12, 38));//38
作用域

通常來(lái)說(shuō)遇绞,一段程序代碼中所用到的名字并不總是有效和可用的,而限定這個(gè)名字的可用性的代碼范圍就是這個(gè)名字的作用域燎窘。作用域的使用提高了程序邏輯的局部性摹闽,增強(qiáng)了程序的可靠性,減少了名字沖突褐健。

作用域有三種
全局作用域:作用于所有代碼執(zhí)行的環(huán)境(整個(gè) script 標(biāo)簽內(nèi)部)或者多個(gè) js 文件
局部作用域:作用于函數(shù)內(nèi)的代碼環(huán)境付鹿,就是局部作用域。 因?yàn)楦瘮?shù)有關(guān)系蚜迅,所以也稱為函數(shù)作用域舵匾。
塊級(jí)作用域:塊作用域由 { } 包括,if語(yǔ)句和for語(yǔ)句里面的{ }等

根據(jù)作用域的不同,變量也分為全局變量谁不、局部變量坐梯、塊級(jí)變量
全局變量:全局變量在變量定義之后區(qū)域可以訪問(wèn)和修改
局部變量:局部變量只能在當(dāng)前函數(shù)內(nèi)部訪問(wèn)和修改
塊級(jí)變量:let定義的變量,只能在塊作用域里訪問(wèn),不能跨塊訪問(wèn),也不能跨函數(shù)訪問(wèn)

變量作用域特殊情況:

  • 如果函數(shù)內(nèi)部或者塊級(jí)作用域內(nèi)部,變量沒(méi)有聲明刹帕,直接賦值吵血,也當(dāng)全局變量看,但是強(qiáng)烈不推薦
  • 函數(shù)內(nèi)部的形參可以看做是局部變量轩拨,所以形參相當(dāng)于函數(shù)內(nèi)部定義的局部變量践瓷,只有在函數(shù)內(nèi)部可以使用。
變量訪問(wèn)原則-作用域鏈

只要是代碼亡蓉,就至少有一個(gè)作用域
寫在函數(shù)內(nèi)部的局部作用域
如果函數(shù)中還有函數(shù),那么在這個(gè)作用域中就又可以誕生一個(gè)作用域
根據(jù)在內(nèi)部函數(shù)可以訪問(wèn)外部函數(shù)變量的這種機(jī)制喷舀,用鏈?zhǔn)讲檎覜Q定哪些數(shù)據(jù)能被內(nèi)部函數(shù)訪問(wèn)砍濒,就稱作作用域鏈
作用域鏈遵循就近原則來(lái)查找變量最終的值

匿名函數(shù):

將匿名函數(shù)賦值給一個(gè)變量,并且通過(guò)變量名稱進(jìn)行調(diào)用 我們將這個(gè)稱為函數(shù)表達(dá)式
語(yǔ)法:

let fn = function () {
   //函數(shù)體
};

調(diào)用:

fn();

使用場(chǎng)景:Web API階段會(huì)用

立即執(zhí)行函數(shù)

作用:防止全局變量污染
語(yǔ)法:

(function () {console.log(11)} ) ();
(function () {console.log(22)} () );

注意: 多個(gè)立即執(zhí)行函數(shù)要用 ; 隔開硫麻,要不然會(huì)報(bào)錯(cuò)

轉(zhuǎn)換時(shí)間案例:

    // 小時(shí):  h =  parseInt(總秒數(shù) / 60 / 60 % 24)
    // 分鐘:  m = parseInt(總秒數(shù) / 60 % 60 )
    // 秒數(shù):   s  = parseInt(總秒數(shù) % 60) 

    // 步驟一:用戶輸入總秒數(shù)
    let total = prompt("請(qǐng)輸出總秒數(shù)")
    // 步驟二:計(jì)算時(shí)分秒
    let h = parseInt(total / 60 / 60 % 24),
      m = parseInt(total / 60 % 60),
      s = parseInt(total % 60);

    // 步驟三:函數(shù)封裝并輸出格式化
    function normalize(num) {
      // 三元表達(dá)式(雙分支)
      return num < 10 ? `0${num}` : num;
    };

    // 步驟四:函數(shù)調(diào)用以及復(fù)用
    h = normalize(h);
    m = normalize(m);
    s = normalize(s);

    // 步驟五:頁(yè)面輸出
    document.write(`${total}秒轉(zhuǎn)換為${h}時(shí)${m}分${s}秒`);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爸邢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拿愧,更是在濱河造成了極大的恐慌杠河,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異券敌,居然都是意外死亡唾戚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門待诅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叹坦,“玉大人,你說(shuō)我怎么就攤上這事卑雁∧际椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵测蹲,是天一觀的道長(zhǎng)莹捡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)扣甲,這世上最難降的妖魔是什么篮赢? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮文捶,結(jié)果婚禮上荷逞,老公的妹妹穿的比我還像新娘。我一直安慰自己粹排,他們只是感情好种远,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顽耳,像睡著了一般坠敷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上射富,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天膝迎,我揣著相機(jī)與錄音,去河邊找鬼胰耗。 笑死限次,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柴灯。 我是一名探鬼主播卖漫,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赠群!你這毒婦竟也來(lái)了羊始?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤查描,失蹤者是張志新(化名)和其女友劉穎突委,沒(méi)想到半個(gè)月后柏卤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匀油,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年缘缚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧唐。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忙灼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钝侠,到底是詐尸還是另有隱情该园,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布帅韧,位于F島的核電站里初,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忽舟。R本人自食惡果不足惜双妨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叮阅。 院中可真熱鬧刁品,春花似錦、人聲如沸浩姥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)勒叠。三九已至兜挨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眯分,已是汗流浹背拌汇。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弊决,地道東北人噪舀。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像飘诗,于是被迫代替她去往敵國(guó)和親傅联。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容