предопределить, какой тип переменной я делаю - PullRequest
1 голос
/ 05 января 2011

Могу поспорить, что следующая ситуация может быть более эффективной, если удалить деталь из jc.half = jc.half();.Я просто не совсем уверен, как.

jc.half = function(){

    if(jc.singlerow){
        return jc.total
    }else{
        return jc.total / 2;
    }

}
// returns function()

jc.half = jc.half();
// returns the right integer

Я ищу решение, которое делает что-то вроде этого:

jc.half = returnInteger(function(){

    if(jc.singlerow){
        return jc.total
    }else{
        return jc.total / 2;
    }

})
// returns the right integer

Ответы [ 3 ]

3 голосов
/ 05 января 2011
jc.half = (function() {
  return jc.singlerow ? jc.total : jc.total / 2;
})();

Хитрость в том, что когда у вас есть объявление функции, которое начинает таким образом, что синтаксический анализатор может сказать, что это должно быть значение в выражении, тогда определение функции является частью выражения, и вы можете использовать его таким образом и вызывать функцию. На самом деле, с правой стороны от такого назначения нет необходимости использовать круглые скобки, но я делаю это просто по привычке и проясняю для себя при чтении кода.

Конечно, в этом случае вы можете полностью опустить функцию.

jc.half = jc.singlerow ? jc.total : jc.total / 2;

изменить & mdash; полезные комментарии комментатора, о которых вы упоминаете, что вам нужно целое число; Если это так, вы хотите позвонить Math.floor() или Math.round() на ваш результат. Или вы могли бы немного «обмануть» и сделать это:

jc.half = ~~(jc.singlerow ? jc.total : jc.total / 2);
1 голос
/ 05 января 2011

Непонятно, зачем вам нужна функция.

js.half = js.singlerow ? js.total : Math.floor(js.total/2);
1 голос
/ 05 января 2011

Это не вопрос получения правильного типа ... вы определили функцию, но не выполнили ее! Вы можете сделать это самостоятельно:

jc.half = (function(){

    if(jc.singlerow){
        return jc.total
    }else{
        return jc.total / 2;
    }

}) (); // Notice the empty brackets that actually execute the function

Хотя, нужно ли вообще иметь эту функцию?

jc.half = jc.singlerow ? jc.total : jc.total /2;
...