function sum(a) {
var sum = a;
function _sum(b) {
if (b === undefined) return sum;
sum += b;
return _sum;
}
_sum.toString = function() {
return sum;
};
return _sum;
}
sum(1)(2)(3) + sum(2)(2) + sum(sum(1)(2)(3))(4)(5); // 25
sum(1)(2)(0)(3)()
function add(x) {
return function(y) {
return x + y;
};
}
function sum(a) {
return function(b) {
if (b) {
return sum(add(a)(b));
} else {
return a;
}
};
}
sum(1)(2)(3)(4)(5)() === 15
function cons(x) {
return function(y) {
return [x, y];
};
}
function list(a) {
return function(b) {
if (b) {
return list(cons(a)(b));
} else {
return a;
}
};
}
list(1)(2)(3)(4)(5)() === [[[[1, 2], 3], 4], 5]
function cons(x) {
return function(y) {
return [x, y];
};
}
function list(a) {
return function(b) {
if (typeof b !== 'undefined') {
if (a instanceof Array) {
return list(cons(b)(a));
} else {
return list(cons(b)(cons(a)('NIL')));
}
} else {
return a;
}
};
}
list(1)(2)(0)(4)(5)() === [5,[4,[0,[2,[1,"NIL"]]]]]
// Объявление фабрики объектов
function Idiot(name) {
return { name: name };
}
// создание экземпляра объекта
var idiot1 = Idiot('Bill');
console.dir(idiot1);
// Объявление фабрики классов
function PhilosophySchool(schoolName) {
return function Philosopher(name) {
return { name: name, school: schoolName };
};
}
// Создание класса
var Stoicism = PhilosophySchool('Stoicism');
var philosopher = Stoicism('Marcus Aurelius');
console.dir(philosopher);
// Объявление базового прототипа
function Engineer(specialization) {
this.specialization = 'Software';
};
Engineer.prototype.getName = function() {
return this.specialization + ' engineer ' + this.name;
}
// Объявление фабрики
function University(specialization) {
function factoryConstructor(name) {
this.name = name;
};
factoryConstructor.prototype = new Engineer(specialization);
return factoryConstructor;
}
// Создание конструктора инженеров-программистов
SoftwareEngineer = University('Software');
// Создание экземпляра инженера-программиста
var alex = new SoftwareEngineer('Alex');
console.dir(alex.getName());
Для чего она вообщешоб умники спагетти-код не ваяли
console.log(items_list);
а уже потом items_list = data
И это хорошо, потому, что не происходит ожидания исполнения коллбеков, не происходит блокирования потока исполнения. Всю синхронную логику обработки полученных в коллбеке данных Вы можете написать прямо в коллбеке, а если нужно реализовать последовательный или параллельный вызов нескольких ассинхронных запросов (все, что связано с вводом/выводом, доступом к базе и файлам, например), то это можно сделать разными способами, самые популярные из них, это библиотека async и промисы. Я использую https://github.com/caolan/async Например:var async = require('async');
var items_list, users_list;
async.parallel([
function(callback) { // делаем первый запрос к базе
db.model('items').find({}, function (err, data) {
items_list = data;
callback(); // данные получены, возвращаемся
});
},
function(callback) { // параллельно делаем второй запрос к базе
db.model('users').find({}, function (err, data) {
users_list = data;
callback(); // данные получены, возвращаемся
});
}
],
function() {
// когда оба запроса уже завершены, то мы попадаем сюда
console.dir({ items: items_list, users: users_list });
});
.fp-section {
...
}
.fp-slide,
.fp-tableCell {
...
}