Hace unas semanas, publiqué una publicación de Weibo diciendo que me gustan las funciones que devuelven funciones. Pronto aparecieron algunas respuestas, básicamente todas ellas ... ¿qué? ! Para un programador, comprender la función que devuelve una función es una habilidad muy importante. Utilizándolo, puede guardar mucho código, hacer que JavaScript sea más eficiente y permitirle comprender más el poder de JavaScript. A continuación hay algunos ejemplos simples que escribí, a través de los cuales puedes entender lo que quiero decir.
Supongamos que tiene un objeto que contiene dos objetos infantiles, y todos tienen un método GET. Estos dos métodos son muy similares y ligeramente diferentes:
VAR accesorios = {Sortable: {get: function () {return typeof thant.getAttribute ('sortable')! = 'Undefined'; }}, droppable: {get: function () {return typeOf this.getAttribute ('droppable')! = 'Undefined'; }}};El código repetido no es un buen fenómeno, por lo que necesitamos crear una función externa y aceptar un nombre de propiedad:
function getAttribute (attr) {return typeOf this.getAttribute (attr)! = 'Undefined';} var accesors = {sortable: {get: function () {return getAttribute ('sortable'); }}, droppable: {get: function () {return getAttribute ('droppable'); }}};Esto es mucho mejor, pero todavía no es perfecto porque todavía hay algunas partes redundantes. Una mejor manera es dejar que devuelva directamente la función que necesita al final; esto eliminará la ejecución de la función redundante:
function generategetMethod (attr) {return function () {return typeOf this.getAttribute (attr)! = 'Undefined'; };} Var Accessors = {Sortable: {get: generategetMethod ('shortable')}, dropable: {get: generategetMethod ('dropable')}};/ * es completamente equivalente al método original: */var accesors = {sortable: {get: function () {return typeOf thant este.getTribute ('sortable'). }}, droppable: {get: function () {return typeOf this.getAttribute ('droppable')! = 'Undefined'; }}};*/Lo que ves anteriormente es una función que devuelve una función; Cada objeto infantil tiene su propio método GET, pero se elimina el proceso de ejecución anidada de la función innecesaria.
Esta es una técnica muy útil que puede ayudarlo a eliminar la duplicación de un código similar. Si se usa correctamente, ¡puede hacer que su código sea más legible y más fácil de mantener!
¿Lo entiendes?