应该返回函数的Javascript函数成为函数

时间:2014-06-07 17:29:13

标签: javascript function closures

很久以前我已经阅读了很多关于javascript编码约定的内容,而我想要决定的事情之一就是更好地声明函数的方法。

我终于坚持了
var func_name = function(){};

版本,因为它在某些情况下似乎更有用,但直到现在我才能找到它们之间不会以相同方式工作的东西。

我正在编写一个应该返回一个新函数的函数,该函数将在setTimeout命令中使用,但我无法使其正常工作,并且在我将整个内容减少到此测试代码之后:

var test = new function(x) {
  return function() {
    if (x % 2 == 1) {
      console.log('a');
    }

    else {
      console.log('b');
    }

    x++;
  };
};

我碰巧尝试将其写在

function func_name(){}

样式会有所帮助(因为我真的看不到代码的问题),而且有趣的是这段代码

function test(x) {
  return function() {
    if (x % 2 == 1) {
      console.log('a');
    }

    else {
      console.log('b');
    }

    x++;
  };
}

似乎工作得很好。 一个奇怪的事情是,在控制台中玩了一下后,我意识到第一个有效地成为它应该产生的功能。

我也在Chrome和Firefox中测试了它,我也尝试过这样使用它

var test = new function(x) {
  var result = function() {
    if (x % 2 == 1) {
      console.log('a');
    }

    else {
      console.log('b');
    }

    x++;
  };

  return result;
};

但我无法使其发挥作用。

我会对这种现象的任何解释感兴趣,如果有办法使这种类型的函数声明能够产生函数,我也很有兴趣。

提前致谢!


编辑:我不知道怎么做,但不知怎的,new关键字错误地出现了:D(甚至是我的那个愚蠢的复制粘贴懒惰进入第三个版本...... 。) 我仍然有兴趣知道为什么函数会成为它应该创建的东西!

1 个答案:

答案 0 :(得分:2)

您为什么使用new?删除它,它应该是好的IMO。

您正在使用它,就好像它是Construtor

虽然有效,但可以将问题视为当前问题。