应该返回函数的 JavaScript 函数变成了函数

标签 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(甚至由于我愚蠢的复制粘贴懒惰而进入第三个版本。 ....) 我仍然有兴趣知道为什么这个函数会变成它应该创建的样子!

最佳答案

为什么要使用new?删除它,在我看来应该没问题。

您将它用作构造函数

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

关于应该返回函数的 JavaScript 函数变成了函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24099827/

相关文章:

javascript - 将包含 ASCII 二进制十六进制的字符串转换为 Buffer

javascript - jQuery 在点击时调用自定义函数

Go闭包变量作用域

javascript - JS : write a join function using reduce method . .. 函数的控制台日志返回不正确的输出

javascript - 为什么使用命名空间并用 "this"污染代码

c# - 闭包有什么特别之处?

javascript - 关于Window onload、ondomready等

javascript - 为什么功能会按顺序运行,即使它们是在循环内异步调用的?

javascript - 如何按值查找多个数组元素?

function - 在基准测试期间在 R 中多次运行函数