温馨提示:本文翻译自stackoverflow.com,查看原文请点击:javascript - An expression in a function is not evaluating to true when it should. How can I fix this?
javascript

javascript - 函数中的表达式在应有的情况下不会求值为true。

发布于 2020-03-27 12:09:24

我正在使一个函数等待条件成立,然后再执行一个函数。输入的表达式为a ==5。a开头等于0,并且每次执行该函数时,它都会上升1。当它等于5时,该函数仍会得出false。

我的.js文件:

var _ = {
    waitUntil: function(duringExecution, expression, onCompletion) {
        test();
        function test(){
            console.log(a + ' ' + expression);
            if((expression) == true) {
                onCompletion();
            } else {
                duringExecution();
                setTimeout(test, 200);
            }
        }
    }
}

a = 0;
_.waitUntil(function() {
    a++;
}, a == 5, function() {
    console.log('yay');
});

我的HTML文件中没有任何内容,除了script标签。

<!DOCTYPE html>
<html>
    <head>
        <title>example lul</title>
    </head>
    <body>
        <script src='under.js'></script>
    </body>
</html>

每次运行该函数时,它都会打印a的值和表达式的结果。控制台仅打印:

1 false
2 false
3 false
4 false
5 false
6 false
7 false
...

它会永远持续下去。当a == 5时,它应该打印a true并停止,但不是。

查看更多

查看更多

提问者
Daniel Reynolds
被浏览
39
Maheer Ali 2019-07-04 00:05

每当您编写一个表达式时,它总是被评估为其值。例如,当您传递a == 5给函数时,它返回falsefalse传递给函数。

您需要包装a == 5一个函数。并在需要检查状况时调用它。

var _ = {
    waitUntil: function(duringExecution, expression, onCompletion) {
        test();
        function test(){
            console.log(a + ' ' + expression());
            if(expression() == true) {
                onCompletion();
            } else {
                duringExecution();
                setTimeout(test, 500);
            }
        }
    }
}

a = 0;
_.waitUntil(function() {
    a++;
},function(){ 
    return a == 5
}, function() {
    console.log('yay');
});