JS學(xué)習(xí)之函數(shù)定義與參數(shù)

功能

作為第一類對(duì)象蛉艾,函數(shù)和JS中其他對(duì)象一樣依鸥,類似于其對(duì)象類型,函數(shù)具有以下功能:

  • 通過字面量創(chuàng)建
function fun1() { }
  • 賦值給變量壕鹉、數(shù)組項(xiàng)或其他對(duì)象的屬性
// 為變量賦值一個(gè)新函數(shù)
let v1 = function fun2() { };

// 向數(shù)組中增加一個(gè)函數(shù)
let arr1 = [];
arr1.push(function () { });

// 給對(duì)象的屬性賦值為一個(gè)新函數(shù)
let obj1 = {};
obj1.name = function () {};
  • 作為函數(shù)的參數(shù)來傳遞
function fun2(test) {
    test();
}
fun2(function () { });
  • 作為函數(shù)的返回值
function fun3() {
    return function () {};
}
  • 具有動(dòng)態(tài)創(chuàng)建和分配的屬性
let v2 = function () {};
v2.name = "test";
  • 回調(diào)函數(shù)是被代碼隨后“回來調(diào)用”的函數(shù)垄开,它是一種很常用的函數(shù)琴许,特別是在事件處理場(chǎng)景下
let button = document.getElementById("callback");
button.addEventListener("click", function () {
    console.log("button 點(diǎn)擊了!");
});
  • 函數(shù)具有屬性,而且這些屬性能夠被存儲(chǔ)任何信息溉躲,我們可以利用這個(gè)特性來做很多事情
// 可以在函數(shù)屬性中存儲(chǔ)另一個(gè)函數(shù)榜田,用于之后的引用和調(diào)用
let store = {
      nextId: 1,
      cache: {},
      add: function (fn) {
          // 僅當(dāng)函數(shù)唯一時(shí)才將該函數(shù)加入緩存
          if (!fn.id) {
              fn.id = this.nextId++;
              this.cache[fn.id] = fn;
              return true;
          } else {
              return false;
          }
      }
};

function fun4() {}
console.log(store.add(fun4));// true
console.log(store.add(fun4)); // false


// 可以用函數(shù)屬性創(chuàng)建一個(gè)緩存(記憶),用于減少不必要的計(jì)算
function f5(value) {
      // 計(jì)算某個(gè)數(shù)是否是素?cái)?shù)
      if (!f5.answers) {
          // 給函數(shù)創(chuàng)建一個(gè)緩存對(duì)象屬性
          f5.answers = {};
      }
      // 檢查value是否已在緩存對(duì)象中
      if (f5.answers[value] !== undefined) {
          return f5.answers[value];
      }
      // 前提條件該value不能是0和1锻梳,因?yàn)檫@兩個(gè)數(shù)不是素?cái)?shù)
      let isPrime = value !== 0 && value !== 1;
      for (let i = 2; i < value; i++) {
          if (value % i === 0) {
              isPrime = false;
              break;
          }
      }
      return f5.answers[value] = isPrime;
}
console.log(f5(5)); // true
console.log(f5.answers[5]); // true

函數(shù)定義方式

  • 函數(shù)聲明
function f6() {}
  • 函數(shù)表達(dá)式
// 作為賦值表達(dá)式的右值
let v6 = function () {};
// 作為其它函數(shù)的參數(shù)
f6(function () {});
// 作為函數(shù)返回值
function f7() {
    return function () {};
}
  • 立即函數(shù)箭券。JS引擎解析到時(shí)會(huì)馬上執(zhí)行函數(shù)
+function () {console.log("立即函數(shù)");}();
-function () {}();
!function () {}();
~function () {}();
(function () {})();
  • 箭頭函數(shù)
let arr2 = [0, 3, 2, 5, 4, 8, 1];
arr2.sort((value1, value2) => value1 - value2);
  • 函數(shù)構(gòu)造函數(shù)
console.log(new Function("a", "b", "return a + b")(1, 2));
  • 生成器函數(shù)
function* myGen() {
      yield 10;
      y = yield "foo";
      yield y;
}

let gen = myGen();
console.log(gen.next());// {value: 10, done: false}
console.log(gen.next());// {value: "foo", done: false}
// 第二次函數(shù)調(diào)用時(shí),遇到y(tǒng)ield就把值返回了疑枯,并未給y賦值
console.log(gen.next());// {value: undefined, done: false}
console.log(gen.next());// {value: undefined, done: true}

函數(shù)參數(shù)

  • 剩余參數(shù)
// 不與任何形參名相匹配的額外實(shí)參可能通過剩余參數(shù)來引用
function f8(value, ...restParam) {
    for (let i = 0; i < restParam.length; i++) {
        console.log(`剩余參數(shù):${restParam[i]}`);// 2,3,4
    }
}
f8(1, 2, 3, 4);
  • 默認(rèn)參數(shù)
function f9(name, action = "舞蹈") {
    console.log(`${name}喜歡${action}`)
}

f9("Lily");// Lily喜歡舞蹈
f9("Jack", "藍(lán)球");// Jack喜歡藍(lán)球
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辩块,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌废亭,老刑警劉巖国章,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異豆村,居然都是意外死亡液兽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門掌动,熙熙樓的掌柜王于貴愁眉苦臉地迎上來四啰,“玉大人,你說我怎么就攤上這事粗恢「躺梗” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵眷射,是天一觀的道長(zhǎng)匙赞。 經(jīng)常有香客問我,道長(zhǎng)凭迹,這世上最難降的妖魔是什么罚屋? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮嗅绸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撕彤。我一直安慰自己鱼鸠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布羹铅。 她就那樣靜靜地躺著蚀狰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪职员。 梳的紋絲不亂的頭發(fā)上麻蹋,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音焊切,去河邊找鬼扮授。 笑死,一個(gè)胖子當(dāng)著我的面吹牛专肪,可吹牛的內(nèi)容都是我干的刹勃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嚎尤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼荔仁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤乏梁,失蹤者是張志新(化名)和其女友劉穎次洼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遇骑,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滓玖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了质蕉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片势篡。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖模暗,靈堂內(nèi)的尸體忽然破棺而出禁悠,到底是詐尸還是另有隱情,我是刑警寧澤兑宇,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布碍侦,位于F島的核電站,受9級(jí)特大地震影響隶糕,放射性物質(zhì)發(fā)生泄漏瓷产。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一枚驻、第九天 我趴在偏房一處隱蔽的房頂上張望濒旦。 院中可真熱鬧,春花似錦再登、人聲如沸尔邓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梯嗽。三九已至,卻和暖如春沽损,著一層夾襖步出監(jiān)牢的瞬間灯节,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工绵估, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炎疆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓壹士,卻偏偏與公主長(zhǎng)得像磷雇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躏救,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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