Javascript 由于未知原因,局部变量返回未定义

Javascript 由于未知原因,局部变量返回未定义,javascript,ecmascript-6,Javascript,Ecmascript 6,我有这个功能: getKeyboardStartingPoint() { let currentCellNumberElement; window.setTimeout(function() { $cells.each(function() { currentCellNumberElement = $(this).find('[data-number]'); if (currentCellNumberElement

我有这个功能:

getKeyboardStartingPoint() {
    let currentCellNumberElement;

    window.setTimeout(function() {
        $cells.each(function() {
            currentCellNumberElement = $(this).find('[data-number]');
            if (currentCellNumberElement.text().trim().length === 0) {
                currentCellNumberElement.css('background-color', 'orange');
                return false;
            }
        });
    }, 100);

    return currentCellNumberElement;
}

变量currentCellNumberRelation在函数顶部局部声明,在每个循环中进行处理,然后我尝试向它发出警报。但是,该变量返回未定义的值。css在元素上的更改是有效的,因此变量确实有一个值,但由于某些原因,当每个循环结束时,它将变得未定义。这里有什么问题?

在进入循环之前,先打印CurrentCellNumberRelation,在循环中为其赋值

我认为你应该这样做:

getKeyboardStartingPoint() {
    let currentCellNumberElement;

    window.setTimeout(function() {
        $cells.each(function() {
            currentCellNumberElement = $(this).find('[data-number]');
            if (currentCellNumberElement.text().trim().length === 0) {
                currentCellNumberElement.css('background-color', 'orange');
                return false;
            }
        });
        alert(currentCellNumberElement);
    }, 100);

}

但正如JJJ所说:这里有完整的解释:

我认为基本问题可能是返回false是从setTimeout返回的,因此它没有结果,也没有其他条件使函数返回false或未定义。此外,警报是在setTimeout完成之前发生的,因此将始终未定义。@user3094755 return false停止$。每个循环都会停止,因此该部分是正常的。在超时内返回变量也不会起到未定义的作用。警报或控制台记录超时内的变量确实有效。但是,我需要退货,你不能。函数在超时解决之前很久就结束了。谢谢,我刚刚解决了这个问题。然而,我犯了一个错误,我警惕地问了这个问题。实际上,我需要返回它,但是当我在超时内返回变量时,它也返回未定义的。我认为这个答案很好地回答了您的问题: