Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
if(b)
содержит ошибку. Попробуйте вычислить add(2)(0)(3)()
…А если, говорят, сигнатура функции должна быть типа такой: add(num1)(num2)?
assert.equal(add(0)(0.5), 0.5);
assert.equal(add('aa')(1), 1);
assert.equal(add('aa'), 0);
parseInt(val+'', 10)
на более стандартное приведение к числу +val
(оно вызовет .valueOf), а если предполагаем что строки и другие объекты у нас считаются нулями (с чем я бы поспорил), то добавляем "|| 0
". Получаем короче и симметричнее:var add = function (orig) {
var inner = function (val) {
return add((+val || 0) + (+orig || 0));
};
inner.valueOf = function () {return +orig || 0;};
return inner;
};
cas.on(cas.EVENT_CA_EXTENDED_MESSAGE, ui.emit.bind(ui, ui.EVENT_SHOW_POPUP));
cas.on(cas.EVENT_CA_EXTENDED_MESSAGE, function (message) {
ui.emit(ui.EVENT_SHOW_POPUP, message);
});
var add = function (n) {
var orig = +n || 0,
inner = function (val) {
return add((+val || 0) + orig);
};
inner.valueOf = function () {return orig;};
return inner;
};
assert.equal(add('aa')(1), 'aa1');
var add = function (orig) {
var inner = function (val) {
return add(orig + val);
};
inner.valueOf = function () {return orig;};
return inner;
};
it ('text', function () {
? Я как бы понимаю ещё такое начало (function () {
(создаём отдельный приватный контекст), но причём тут it и текст в начале? И желательно линк на чтиво.describe('test name', function () { /* вот тут тестируемый код */});
var add = function (x) {
x = +x;
var adder = function (y) {
y = +y;
return add(x + y);
};
adder.valueOf = function () {
return x;
};
adder.toString = function () {
return x.toString();
};
return adder;
};
var sum = function (args) {
return Array.prototype.slice.call(args).reduce(function (m, el) { return m + el; }, 0);
};
var add = function () {
var orig = sum(arguments);
var inner = function () {
var val = sum(arguments);
return add((+val || 0) + (+orig || 0));
};
inner.valueOf = function () {return +orig || 0;};
return inner;
};
assert.equal(add(2, 0)(3), 5);
function sum(a,b) {return a+b}
function mul(a,b) {return a*b}
var a = make(1)(2)(3)(4)(5)
var b = make(2)(3)(4)
a(sum) // 15
b(sum) // 9
a(mul) // 120
b(mul) // 24
function make(x){
var args = [];
function f(y){
if(typeof y == 'function')return args.reduce(y);
return args.push(y), f;
}
return f(x);
}
function make(x){
function f(){
var y = Array.prototype.pop.call(arguments);
if(typeof y == 'function')return Array.prototype.reduce.call(arguments, y);
return f = f.bind(null, y);
}
return f(x);
}
Интересная задачка для интервью, карринг и частичное применение функции