Несколько недель назад я опубликовал пост Weibo, в котором говорилось, что мне нравятся функции, которые возвращают функции. Вскоре появилось несколько ответов, в основном все они ... что? ! Для программиста понимание функции, которая возвращает функцию, является очень важным навыком. Используя его, вы можете сохранить много кода, сделать JavaScript более эффективным и позволить вам дополнительно понять силу JavaScript. Ниже приведены несколько простых примеров, которые я написал, по которым вы можете понять, о чем я.
Предположим, у вас есть объект, который содержит два дочерних объекта, и у всех есть метод получения. Эти два метода очень похожи и немного отличаются:
var Accessors = {Sortable: {get: function () {return typeof this.getAttribute ('sortable')! = 'undefined'; }}, droppable: {get: function () {return typeof this.getattribute ('droppable')! = 'undefined'; }}};Повторный код не является хорошим явлением, поэтому нам нужно создать внешнюю функцию и принять имя свойства:
function getAttribute (attr) {return typeof this.getattribute (attr)! = 'undefined';} var accessors = {sortable: {get: function () {return getAttribute ('sortable'); }}, droppable: {get: function () {return getAttribute ('droppable'); }}};Это намного лучше, но это все еще не идеально, потому что есть еще некоторые избыточные части. Лучший способ - позволить ему прямо вернуть нужную вам функцию в конце - это устранит избыточное выполнение функции:
функция GENERATEGETMETHOD (attr) {return function () {return typeof this.getattribute (attr)! = 'undefined'; };} var Accessors = {Sortable: {get: GenerateGetMethod ('Sortable')}, Droppable: {get: GenerateGetMethod ('droppable')}};/ * Он полностью эквивалент исходному методу: */var accessors = {sortable: {get: function () {return typeof this.getabletrubt (sortefiture '); }}, droppable: {get: function () {return typeof this.getattribute ('droppable')! = 'undefined'; }}};*/То, что вы видите выше, является функцией, которая возвращает функцию; У каждого дочернего объекта есть свой метод получения, но ненужная функция вложенного процесса выполнения удаляется.
Это очень полезный метод, который может помочь вам устранить дублирование аналогичного кода. При правильном использовании он может сделать ваш код более читабельным и проще в обслуживании!
Вы понимаете?