2021-10-27 Javascript悟道

reduce

當(dāng)你傳入一個初始值的時候,reduce函數(shù)會為你遍歷數(shù)組中的每一個元素;而當(dāng)你不傳初始值的時候,reduce則會拿第零個元素作為初始值,從第一個元素開始遍歷

sort

  • 方法的默認比較函數(shù)會將所有比較對象都轉(zhuǎn)成字符串,即便里面的元素都是數(shù)字

  • 在比較大小的時候,如果認為第一個參數(shù)應(yīng)當(dāng)排在第二個參數(shù)前面,則自定義比較函數(shù)需要返回一個負數(shù);如果第二個參數(shù)應(yīng)當(dāng)排在前面,則需要返回正數(shù);如果自定義比較函數(shù)返回0,則表示比較函數(shù)無法判斷孰大孰小。

function refine(collection, path) {
  return path.reduce(function (refinement, element) {
    try {
      return refinement[element];
    } catch (error) {}
  }, collection);
}

const by = (...keys) => {
  const paths = keys.map((item) => item.toString().split("."));

  return (first, second) => {
    let first_value, second_value;

    if (
      paths.every(function (path) {
        first_value = refine(first, path);
        second_value = refine(second, path);
        return first_value === second_value;
      })
    ) {
      return 0;
    }

    return (
      typeof first_value === typeof second_value
        ? first_value < second_value
        : typeof first_value < typeof second_value
    )
      ? -1
      : 1;
  };
};

let people = [
  { first: "Frank", last: "Farkel" },
  { first: "Fanny", last: "Farkel" },
  { first: "Sparkle", last: "Farkel" },
  { first: "Charcoal", last: "Farkel" },
  { first: "Mark", last: "Farkel" },
  { first: "Simon", last: "Farkel" },
  { first: "Gar", last: "Farkel" },
  { first: "Ferd", last: "Berfel" },
];

people.sort(by("first", "second"));

console.log(people);

WeakMap

function factory() {
    const map = new WeakMap()
    return {
        seal: (object) => {
            const box = Object.freeze(Object.create(null))

            map.set(box, object)
            return map
        },
        unseal: (box) => {
            return map.get(box)
        }
    }
}

Object.freeze && const

Object.freeze是作用于值的,而const則作用于變量

函數(shù)對象

  • 函數(shù)對象中包含一個Function.prototype的委托連接。函數(shù)對象通過該連接集成了兩個不是特別重要的方法,分別是apply和call。

  • 當(dāng)前函數(shù)可執(zhí)行代碼的引用。

  • 當(dāng)函數(shù)對象被創(chuàng)建的時候,這個函數(shù)對應(yīng)的活躍對象就被激活了,從而為閉包提供了可能性。函數(shù)可以通過這個隱藏屬性去訪問函數(shù)中創(chuàng)建它的變量。

  • 函數(shù)是可嵌套的。當(dāng)嵌套的函數(shù)對象被創(chuàng)建時,它會包含一個外層函數(shù)對象所對應(yīng)的活躍對象引用。

generate

  • 生成器用function*函數(shù)體創(chuàng)建函數(shù)對象,而該函數(shù)對象則會產(chǎn)生包含next方法的對象。
  • 生成器介于純函數(shù)和非純函數(shù)之間。之前的constant生成器是純的,而大多數(shù)生成器則是非純的。

尾調(diào)用函數(shù)

當(dāng)一個函數(shù)返回另一個函數(shù)的返回值時,我們就稱其是一個尾調(diào)用。

function continuize(any) {
    return function hero(fn2, ...args) {
        return fn2(any(...args)); // 尾調(diào)用函數(shù)
    }
}

promise && async / await

那就是將邏輯與控制流強耦合在了一起。這就必然導(dǎo)致低內(nèi)聚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文章鏈接https://mp.weixin.qq.com/s?__biz=Mzg3ODAyMzkxOQ==&mi...
    炎奕閱讀 400評論 0 1
  • [toc] 第一部分 函數(shù)式思想 第 1 章 走近函數(shù)式 函數(shù)式思想什么是函數(shù)式編程以及為什么要進行函數(shù)式編程不變...
    TWLESVCNZ閱讀 837評論 0 1
  • 每日一題 以下哪個會打印出"3"?3.toString() //報錯 Uncaught SyntaxError...
    咸小七閱讀 457評論 0 0
  • 方便起見不分parameter[形參,出現(xiàn)在函數(shù)定義中]和argument[實參,其值為傳入函數(shù)的值],一律當(dāng)作a...
    東月三二閱讀 443評論 0 0
  • 1. undefined 和 null 有什么區(qū)別? 相似之處: 它們屬于 JavaScript 的 7 種基本類...
    耶啵_閱讀 351評論 0 0

友情鏈接更多精彩內(nèi)容