javascript,一个变量可以是一个值,也是一个函数吗?

javascript, can a variable be a value and also a function?

可以像下面这样在 javascript 中编码:

var foo = function(n) { //magic codes };
var bar = foo(2);

bar + 2      // result: 4
bar(2)       // result: 4
bar(2)(2)    // result: 6

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

    function add(number) {
      return function(number2) {
        return number + number2;
      }
    }

    console.log(add(5)(6));

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

一个变量只能保存一个值。该值可以是一个函数。

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

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));

这当然很可怕。

我从 Quetin 的回答中得到启发,找到了 valueOf 属性

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));

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