Как может я делать var =, добавляют (2) (3);//5 работ?

Этот результат я достиг с помощью буфера трафарета: https://jsfiddle.net/mmalex/g3hf4zxc/

Stencil buffer clipping threejs Grid by Mesh

const gl = renderer.getContext();
polygon.onBeforeRender = function () {
    gl.enable(gl.STENCIL_TEST)
    gl.stencilFunc(gl.ALWAYS, 1, 0xFF);
    gl.stencilMask(0xFF);
    gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
}
polygon.onAfterRender = function() {
    gl.disable(gl.DEPTH_TEST);
}
polygon.renderOrder = 999;

gridHelper.onBeforeRender = function() {
    gl.enable(gl.STENCIL_TEST)
    gl.stencilMask(0x00);
    gl.stencilFunc(gl.EQUAL, 1, 0xFF);
}
gridHelper.onAfterRender = function() {
    gl.disable(gl.STENCIL_TEST)
}
gridHelper.renderOrder = 1000

К сожалению, я пожертвовал непрозрачностью сетки, поскольку threejs независимо сортирует непрозрачные и прозрачные объекты:

.renderOrder: Number Это значение позволяет переопределить порядок рендеринга объектов графа сцены по умолчанию, хотя и непрозрачный и прозрачные объекты остаются отсортированными независимо. Сортировка от самого низкого до самого высокого renderOrder. Значение по умолчанию равно 0.

blockquote>

https://threejs.org/docs/#api/en/core/Object3D.renderOrder

38
задан TylerH 29 January 2018 в 22:26
поделиться

5 ответов

Вам нужно добавить функцию, которая принимает аргумент и возвращает функцию, которая принимает аргумент, который добавляет аргумент для добавленияи сам.

var add = function(x) {
    return function(y) { return x + y; };
}
86
ответ дан 27 November 2019 в 02:58
поделиться

мы можем сделать эту работу с помощью закрытия.

    function add(param1){
      return function add1(param2){
      return param2 = param1 + param2;
    }
  }
  console.log(add(2)(3));//5
0
ответ дан 27 November 2019 в 02:58
поделиться

в дополнение к тому, что уже было сказано, вот решение с универсальным каррированием (на основе http://github.com/sstephenson/prototype/blob /master/src/lang/function.js#L180 )

Function.prototype.curry = function() {
    if (!arguments.length) return this;
    var __method = this, args = [].slice.call(arguments, 0);
    return function() {
      return __method.apply(this, [].concat(
        [].slice.call(args, 0),
        [].slice.call(arguments, 0)));
   }
}


add = function(x) {
    return (function (x, y) { return x + y }).curry(x)
}

console.log(add(2)(3))
3
ответ дан 27 November 2019 в 02:58
поделиться
function add(x){
  return function(y){
    return x+y
  }
}

Функции первого класса и закрытия делают свое дело.

15
ответ дан 27 November 2019 в 02:58
поделиться
function add(x) {
    return function(y) {
        return x + y;
    };
}

Ах, красота JavaScript

Этот синтаксис тоже довольно изящный

function add(x) {
    return function(y) {
        if (typeof y !== 'undefined') {
            x = x + y;
            return arguments.callee;
        } else {
            return x;
        }
    };
}
add(1)(2)(3)(); //6
add(1)(1)(1)(1)(1)(1)(); //6
34
ответ дан 27 November 2019 в 02:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: