JavaScript、变量范围、变量求值顺序

JavaScript、变量范围、变量求值顺序,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,我正在使用量角器测试一些angularjs应用程序,遇到了这样一个问题: var counter = 0; redButton.click(); allImages.each(function(element) { element.isDisplayed().then(function(isDispl){ if(isDispl === true){ expect(element.getInnerHtml()).toContain('red');

我正在使用量角器测试一些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

为什么会这样?为什么变量计数器不等于2——条件isDispl==true为fullfield的次数?

在JavaScript中一次只能运行一个函数(这稍微简化了一点,存在异常)

主函数在其他任何事情发生之前一直运行。因为该功能包括
console.log(计数器)
,它记录当时
计数器的值

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

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


由于这是在您唯一一次输出
计数器的值之后发生的,因此您从未观察到它达到
2

为什么您期望输出?您使用了回调(传入“then”的函数)。该函数不会立即调用,而是在将来的某个时候调用。这也可能有助于您: