【问题标题】:Javascript function that should return a function becomes the function应该返回函数的Javascript函数成为函数
【发布时间】:2014-06-07 17:29:12
【问题描述】:

很久以前,我已经阅读了很多关于 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(甚至由于我愚蠢的复制粘贴懒惰进入了第三个版本.....) 不过,我仍然想知道为什么函数会变成它应该创建的东西!

【问题讨论】:

  • 不要使用new,只使用var test = function() ...
  • 谢谢!!!我不知道我怎么能忽略这一点......(我不打算在那里写,我不知道这是怎么发生的XD)我仍然有兴趣知道为什么它会变成它应该生成的内容1

标签: javascript function closures


【解决方案1】:

你为什么使用new?删除它,IMO 应该没问题。

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

虽然有效,但可以创建问题作为您当前的问题。

【讨论】:

  • 非常感谢!我不知道我怎么能忽略这一点......(有点像一个错字,我以前从来没有搞砸过)
  • 很高兴能帮到你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2019-10-18
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
相关资源
最近更新 更多