Il y a quelques semaines, j'ai posté un article de Weibo disant que j'aime les fonctions qui renvoient les fonctions. Quelques réponses sont bientôt apparues, essentiellement toutes ... quoi? ! Pour un programmeur, comprendre la fonction qui renvoie une fonction est une compétence très importante. En utilisant, vous pouvez économiser beaucoup de code, rendre JavaScript plus efficace et vous permettre de mieux comprendre la puissance de JavaScript. Voici quelques exemples simples que j'ai écrits, à travers lesquels vous pouvez comprendre ce que je veux dire.
Supposons que vous ayez un objet qui contient deux objets enfants, et ils ont tous une méthode GET. Ces deux méthodes sont très similaires et légèrement différentes:
var accessors = {sortable: {get: function () {return typeof this.getAttribute ('sortable')! = 'undefined'; }}, droppable: {get: function () {return typeof this.getAttribute ('droppable')! = 'undefined'; }}};Le code répété n'est pas un bon phénomène, nous devons donc créer une fonction externe et accepter un nom de propriété:
function getAttribute (attr) {return typeof this.getAttribute (attr)! = 'undefined';} var accessors = {sortable: {get: function () {return getAttribute ('sortable'); }}, droppable: {get: function () {return getAttribute ('droppable'); }}};C'est bien mieux, mais ce n'est toujours pas parfait car il y a encore des pièces redondantes. Une meilleure façon consiste à le laisser renvoyer directement la fonction dont vous avez besoin à la fin - cela éliminera l'exécution de la fonction redondante:
fonction generateGetMethod (att) {return function () {return typeof this.getAttribute (attr)! = 'undefined'; };} var accessors = {sortable: {get: generateGetMethod ('sortable')}, droppable: {get: generateGetMethod ('droppable')}}; / * il est entièrement équivalent à la méthode d'origine: * / var accessors = {triable: {get: function () {return typeof this.getAtTrribute (')! ='); }}, droppable: {get: function () {return typeof this.getAttribute ('droppable')! = 'undefined'; }}}; * /Ce que vous voyez ci-dessus est une fonction qui renvoie une fonction; Chaque objet enfant a sa propre méthode GET, mais le processus d'exécution imbriqué de la fonction inutile est supprimé.
Il s'agit d'une technique très utile qui peut vous aider à éliminer la duplication d'un code similaire. S'il est utilisé correctement, il peut rendre votre code plus lisible et plus facile à entretenir!
Est-ce que tu comprends?