JavaScript,变量作用域,变量求值顺序

JavaScript, variables scope, order of variable evaluation

我正在使用量角器测试一些 angularjs 应用,遇到了这样的问题:

var counter = 0;
redButton.click();
allImages.each(function(element) {
    element.isDisplayed().then(function(isDispl){
        if(isDispl === true){
            expect(element.getInnerHtml()).toContain('red');
            counter++;
            console.log("I'm here!")
        }
    });
});
console.log(counter);

输出为:

0
I'm here!
I'm here!

虽然我期望输出:

I'm here!
I'm here!
2

为什么会这样?为什么变量 counter 不等于 2 -- 条件 isDispl === true 被填满的次数?

在JavaScript中一次只能运行一个函数(这简化了一点,也有例外)。

主要功能 运行 在其他任何事情发生之前一直完成。由于该函数包含 console.log(counter);,因此它会记录当时 counter 的值

函数完成后,事件循环可以查找已触发的事件。

元素已显示,因此它们的承诺已触发。每次发生这种情况(两次),您都会收到一条消息,并且 counter 的值会发生变化。

因为这发生在你唯一一次输出 counter 的值之后,你永远不会观察到它达到 2