Heim Web-Frontend js-Tutorial 5 gängige Funktionen beim Erlernen von JavaScript

5 gängige Funktionen beim Erlernen von JavaScript

Sep 12, 2018 pm 05:31 PM
javascript 对象拷贝 Curry 防抖

Es gibt einige Probleme in JavaScript (z. B. Drosselungsfunktionen, Anti-Shake-Funktionen, rekursive Funktionen usw.), die häufig besprochen werden. In diesem Kapitel werden Ihnen fünf gängige Funktionen beim Erlernen der Verwendung von JavaScriptz vorgestellt. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Array-Reduzierung

Es gibt viele Möglichkeiten, Arrays zu reduzieren, aber am Ende ist die Rekursion die beste, um eine bestimmte Tiefe der Reduzierung zu erreichen Methode, damit Sie die Grundabläufe verstehen.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function flattenDepth(array, depth = 1) {

  let result = []

  array.forEach(item => {

    let d = depth

    if (Array.isArray(item) && d > 0) {

      result.push(...(flattenDepth(item, --d)))

    } else {

      result.push(item)

    }

  })

  return result

}

 

console.log(flattenDepth([1, [2, [3, [4]], 5]])) // [ 1, 2, [ 3, [ 4 ] ], 5 ]

console.log(flattenDepth([1, [2, [3, [4]], 5]], 2)) // [ 1, 2, 3, [ 4 ], 5 ]

console.log(flattenDepth([1, [2, [3, [4]], 5]], 3)) // [ 1, 2, 3, 4, 5 ]

Nach dem Login kopieren

Die rekursive Implementierung ist sehr einfach und leicht zu verstehen. Wenn es sich bei einem Element um ein Array handelt, wird die Tiefe des Elements hier weiterhin als Abflachungstiefe angegeben Dieser Parameter ist für Arrays wichtig. Jedes Element hat eine Rolle und wird daher in die Schleife eingefügt.

Currying

Über das Currying von Funktionen wurde schlecht gesprochen. Jeder hat sein eigenes Verständnis und seine eigene Implementierungsmethode Wenn genügend Parameter vorhanden sind, wird eine Funktion zurückgegeben. Die vorherigen Parameter werden gespeichert, bis genügend Parameter vorhanden sind.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

function curry(func) {

  var l = func.length

  return function curried() {

    var args = [].slice.call(arguments)

    if(args.length < l) {

      return function() {

        var argsInner = [].slice.call(arguments)

        return curried.apply(this, args.concat(argsInner))

      }

    } else {

      return func.apply(this, args)

    }

  }

}

 

var f = function(a, b, c) {

  return console.log([a, b, c])

};

 

var curried = curry(f)

curried(1)(2)(3) // => [1, 2, 3]

curried(1, 2)(3) // => [1, 2, 3]

curried(1, 2, 3) // => [1, 2, 3]

Nach dem Login kopieren

Aus dem obigen Code ist nicht schwer zu erkennen, dass die Anzahl der Parameter bei jeder Beurteilung mit der Anzahl der Curry-Funktionsparameter verglichen wird Geben Sie die Funktion zurück, andernfalls wird sie ausgeführt.

Anti-Shake

Nach meinem Verständnis bedeutet Anti-Shake, dass egal wie oft man es auslöst, es wartet bis ein Zeitraum, den Sie nach dem Auslösen des letzten Auslösers angeben. Schreiben Sie im Anschluss an diese Erklärung eine Basisversion.

1

2

3

4

5

6

7

8

function debounce(func, wait) {  var timer  return function() {    var context = this

    var args = arguments

    clearTimeout(timer)

    timer = setTimeout(function() {

      func.apply(context, args)

    }, wait)

  }

}

Nach dem Login kopieren

Jetzt ist es erforderlich, dass es beim ersten und letzten Mal ausgelöst wird, und es kann konfiguriert werden. Schreiben Sie zunächst eine Testseite, um das Testen der Funktion zu erleichtern , die Zahl erhöht sich um 1. Testen Sie hier die Anti-Shake- und Throttling-Funktionen.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<html>

<head>

    <style>

        #container{text-align: center; color: #333; font-size: 30px;}

    </style>

</head>

<body>

    <div id="container"></div>

    <script>

      var count = 1

      var container = document.getElementById(&#39;container&#39;)

      function getUserAction(e) {

        // 空格

        if (e.keyCode === 32) {

          container.innerHTML = count++

        }

      }

      // document.onkeydown = debounce(getUserAction, 1000, false, true)

      document.onkeydown = throttle(getUserAction, 1000, true, true)

      function debounce(func, wait, leading, trailing) {}

      function throttle(func, wait, leading, trailing) {}

    </script>

</body>

</html>

Nach dem Login kopieren

Bestimmen Sie, ob der Start und das Ende durch die beiden Parameter Leading und Trailing ausgeführt werden. Wenn Leading wahr ist, wird es jedes Mal ausgeführt, wenn Sie die Leertaste drücken. Wenn Trailing wahr ist, wird der letzte Trigger ausgelöst jedes Mal, wenn es endet. Anti-Shake-Funktionsabstand: Wenn beide wahr sind, wird beim ersten Drücken der Leertaste 1 hinzugefügt, und dann wird bei schnellem Drücken der Leertaste die darin enthaltene getUserAction zu diesem Zeitpunkt nicht ausgeführt, sondern nach dem Loslassen , es wird nach dem Loslassen nicht ausgeführt.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

function debounce(func, wait, leading, trailing) {

  var timer, lastCall = 0, flag = true

  return function() {

    var context = this

    var args = arguments

    var now = + new Date()

    if (now - lastCall < wait) {

      flag = false

      lastCall = now

    } else {

      flag = true

    }

    if (leading && flag) {

      lastCall = now

      return func.apply(context, args)

    }

    if (trailing) {

      clearTimeout(timer)

      timer = setTimeout(function() {

        flag = true

        func.apply(context, args)

      }, wait)

    }

  }

}

Nach dem Login kopieren

Erklären Sie, dass die Zeit des letzten Anrufs jedes Mal mit der aktuellen Zeit verglichen wird. Wenn sie kleiner als das Intervall ist, wird sie nach der ersten Ausführung nicht ausgeführt das Intervall oder wird nach dem Intervall aufgerufen. Setzen Sie dann das Flag zurück und vergleichen Sie es mit der obigen Basisversion.

Drosselung

Drosselung bedeutet, egal wie es ausgelöst wird, es wird gemäß dem angegebenen Intervall ausgeführt , das gleiche Gib mir die Basisversion.

1

2

3

4

5

6

7

8

9

10

11

12

13

function throttle(func, wait) {

  var timer

  return function() {

    var context = this

    var args = arguments

    if (!timer) {

      timer = setTimeout(function () {

        timer = null

        func.apply(context, args)

      }, wait)

    }

  }

}

Nach dem Login kopieren

fügt auch zwei Parameter wie die Anti-Shake-Funktion hinzu. Sie können das obige Beispiel auch zum Testen verwenden. Tatsächlich sind die Codes der beiden sehr ähnlich.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

function throttle(func, wait, leading, trailing) {  var timer, lastCall = 0, flag = true

  return function() {    var context = this

    var args = arguments

    var now = + new Date()

    flag = now - lastCall > wait    if (leading && flag) {

      lastCall = now      return func.apply(context, args)

    }    if (!timer && trailing && !(flag && leading)) {

      timer = setTimeout(function () {

        timer = null

        lastCall = + new Date()

        func.apply(context, args)

      }, wait)

    } else {

      lastCall = now

    }

  }

}

Nach dem Login kopieren

Objektkopie

Es ist bekannt, dass Objektkopien in tiefe Kopien und flache Kopien unterteilt werden. Die Schwarztechnologiemethode ist

1

JSON.parse(JSON.stringify(obj))

Nach dem Login kopieren

Eine andere Methode ist die Verwendung der Rekursion

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

function clone(value, isDeep) {

  if (value === null) return null

  if (typeof value !== &#39;object&#39;) return value

  if (Array.isArray(value)) {

    if (isDeep) {

      return value.map(item => clone(item, true))

    }

    return [].concat(value)

  } else {

    if (isDeep) {

      var obj = {}

      Object.keys(value).forEach(item => {

        obj[item] = clone(value[item], true)

      })

      return obj

    }

    return { ...value }

  }

}

 

var objects = { c: { &#39;a&#39;: 1, e: [1, {f: 2}] }, d: { &#39;b&#39;: 2 } }

var shallow = clone(objects, true)

console.log(shallow.c.e[1]) // { f: 2 }

console.log(shallow.c === objects.c) // false

console.log(shallow.d === objects.d) // false

console.log(shallow === objects) // false

Nach dem Login kopieren

Für Basistypen direkt zurückkehren. Für Referenztypen die Klonmethode rekursiv durchlaufen und aufrufen.

Zusammenfassung

Tatsächlich besteht die allgemeine Idee für die oben genannten Methoden in der Verwendung von Rekursion und Funktionen höherer Ordnung, einschließlich Schließung Front-End stellt diese Fragen gerne zur Verwendung von Paketen. Es ist am besten, sie selbst zu implementieren, was zum Verständnis beiträgt.

Das obige ist der detaillierte Inhalt von5 gängige Funktionen beim Erlernen von JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

Verwendung: In JavaScript wird die Methode insertBefore() verwendet, um einen neuen Knoten in den DOM-Baum einzufügen. Diese Methode erfordert zwei Parameter: den neuen Knoten, der eingefügt werden soll, und den Referenzknoten (d. h. den Knoten, an dem der neue Knoten eingefügt wird).

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

See all articles