Javascript 在匿名回调中使用函数参数返回null/NaN

Javascript 在匿名回调中使用函数参数返回null/NaN,javascript,callback,closures,mocha.js,Javascript,Callback,Closures,Mocha.js,我正在做一些Mocha测试,上面的代码中出现了一个奇怪的错误 当涉及断言时,noToExpect是NaN,而不管我传递了什么数字(尽管上面只是一个示例) 我假设由于使用了回调,noToExpect就在闭包中(尽管我对这个概念还不熟悉) 有没有一种方法可以在闭包中使用传递的参数?我只是缺少一些简单的东西吗 Edit:我在it的第一行添加了一个noToExpect的日志,它记录了200个,因此这个数字正确地进入了it中。noToExpect应该可以在getTotalSessions中的任何一个嵌套匿

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

当涉及断言时,
noToExpect
NaN
,而不管我传递了什么数字(尽管上面只是一个示例)

我假设由于使用了回调,
noToExpect
就在闭包中(尽管我对这个概念还不熟悉)

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


Edit:我在
it
的第一行添加了一个
noToExpect
的日志,它记录了200个,因此这个数字正确地进入了
it
中。

noToExpect
应该可以在getTotalSessions中的任何一个嵌套匿名函数中使用,因为闭包在Java中是如何工作的脚本。我希望你有一些其他类型的错误,让你觉得你没有访问它的权限

一些可能性包括:

  • 您还有其他一些代码错误,它改变了您认为正在发生的执行路径
  • 您在某个地方的变量名拼写错误
  • 其他代码正在更改、重新定义或重写

  • 听起来好像你已经明白了,但这里有一个jsFiddle,它展示了如果其他东西没有弄糟的话,你的一般概念是有效的:

    我不认为函数后面的括号(done){是在实际代码中吗?还是真的?我在
    it
    的第一行添加了一个
    noToExpect
    的日志,它记录了200个。没有拼写错误,因为这是两者之间唯一的交互。实际上,你是对的。这是我代码之外的东西。
    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);
        });
    }