【问题标题】:Using function parameters inside anonymous callback returns null/NaN在匿名回调中使用函数参数返回 null/NaN
【发布时间】:2013-10-03 00:11:15
【问题描述】:
getTotalSessions(200);

function getTotalSessions(noToExpect){
    it("Tests some stuff", function(done){
        this.timeout(0);
        setTimeout(function(){
            checkSessions("day", function(total){
                assert.strictEqual(total, noToExpect, "Session number mismatch!\n\nReturned: " + total + "\nExpected: " + noToExpect + "\n");
                done();
            });
        }, 3000);
    });
}

我正在做一些 Mocha 测试,但在上面的代码中出现了一个奇怪的错误;

noToExpectNaN 在断言时,无论我通过什么数字(尽管上面只是一个示例。

我假设 noToExpect 只是在一个闭包内,因为使用了回调(尽管我对这个概念不熟悉)。

有没有办法可以在该闭包中使用传递的参数?我只是缺少一些简单的东西吗?

编辑:我在it 内的第一行添加了noToExpect 的日志,它记录了200,因此该数字正确地进入了it

【问题讨论】:

  • 我不认为 function(done){ 之后的括号在实际代码中?还是这样?

标签: javascript callback closures mocha.js


【解决方案1】:

noToExpect 应该在 getTotalSessions 内的任何一个嵌套匿名函数中都可用,因为闭包在 Javascript 中是如何工作的。我希望您遇到其他类型的错误,让您误以为您无权访问它。

一些可能性包括:

  1. 您还有一些其他代码错误正在改变您认为正在发生的执行路径。
  2. 您在某个地方的变量名有拼写错误。
  3. 其他代码正在更改、重新定义或覆盖 noToExpect。

听起来你已经明白了,但这里有一个 jsFiddle,它显示了你所拥有的一般概念,如果其他东西没有搞砸的话:http://jsfiddle.net/jfriend00/nY6WC/

【讨论】:

  • 我在it 内的第一行添加了noToExpect 的日志,它记录了200。没有拼写错误,因为这是两者之间的唯一交互。
  • 其实你是对的。这是我的代码之外的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多