Algumas semanas atrás, publiquei um post do Weibo dizendo que gosto de funções que retornam funções. Algumas respostas logo apareceram, basicamente todas elas ... o que? ! Para um programador, entender a função que retorna uma função é uma habilidade muito importante. Usando -o, você pode economizar muito código, tornar o JavaScript mais eficiente e permitir que você entenda melhor o poder do JavaScript. Abaixo estão alguns exemplos simples que escrevi, através dos quais você pode entender o que quero dizer.
Suponha que você tenha um objeto que contenha dois objetos filhos e todos tenham um método GET. Esses dois métodos são muito semelhantes e um pouco diferentes:
var acessores = {classificável: {get: function () {return typeof this.getAttribute ('classable')! = 'indefinido'; }}, droppable: {get: function () {return typeof this.getAttribute ('droppable')! = 'indefinido'; }}};O código repetido não é um bom fenômeno, por isso precisamos criar uma função externa e aceitar um nome de propriedade:
function getAttribute (att) {return typeof this.getAttribute (att)! = 'indefinido';} var acessores = {classable: {get: function () {return getAttribute ('classable'); }}, droppable: {get: function () {return getAttribute ('droppable'); }}};Isso é muito melhor, mas ainda não é perfeito, porque ainda existem algumas partes redundantes. Uma maneira melhor é deixá -lo retornar diretamente a função que você precisa no final - isso eliminará a execução de função redundante:
função generategetMethod (att) {return function () {return typeof this.getAttribute (att)! = 'indefinido'; };} var acessores = {sortable: {get: generategetMethod ('classable')}, droppable: {get: generategetMethod ('droppable')}};/ * é completamente equivalente ao método original: */var acessores = {classable: {get: function () {) }}, droppable: {get: function () {return typeof this.getAttribute ('droppable')! = 'indefinido'; }}};*/O que você vê acima é uma função que retorna uma função; Cada objeto infantil tem seu próprio método GET, mas o processo de execução aninhado da função desnecessário é removido.
Esta é uma técnica muito útil que pode ajudá -lo a eliminar a duplicação de código semelhante. Se usado corretamente, ele pode tornar seu código mais legível e fácil de manter!
Você entende?