javascript,变量可以是值还是函数?

时间:2016-11-30 08:15:46

标签: javascript currying

可以在javascript中进行编码,如下所示:

<input type="text" value="1" maxlength="1">

3 个答案:

答案 0 :(得分:4)

变量只能包含一个值。该值可以是一个函数。

一个对象可以有一个toString()方法,可以被黑客攻击以接近你想要做的事情。

&#13;
&#13;
function myFactory(value) {
  function myFunction(add) {
    return myFactory(value + add);
  }
  myFunction.toString = function() {
    return value;
  };
  return myFunction;
}

var bar = myFactory(2);

console.log(bar + 2);
console.log(bar(2));
console.log(bar(2)(2));
&#13;
&#13;
&#13;

这当然是可怕的。

答案 1 :(得分:2)

通过返回一个函数,可以在Javascript中完成。 默认情况下,变量可以是值(文字或函数结果)或函数声明。

&#13;
&#13;
    function add(number) {
      return function(number2) {
        return number + number2;
      }
    }

    console.log(add(5)(6));
&#13;
&#13;
&#13;

有一些方法可以实现您所描述的bar + 2,但这是非常规的,在我看来,您不应该在Javascript中使用它们。

答案 2 :(得分:0)

我从Quetin的答案中获得了灵感,并找到了valueOf属性

&#13;
&#13;
var foo = function(n) {
  var fn = function(x) {
    return foo(n + x);
  };

  fn.valueOf = function() {
    return n;
  };

  return fn;
}

var bar = foo(2);

console.log(bar + 2 === 4, bar);
console.log(bar(2) === 4, bar(2));
console.log(bar(2)(2) === 6, bar(2)(2));
&#13;
&#13;
&#13;

我承认日志结果确实很奇怪,但它按预期工作。