JavaScript,变量范围,变量评估顺序

时间:2015-02-15 23:23:05

标签: javascript angularjs protractor

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

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的次数是完全填充的?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

由于这是在您输出counter的唯一时间之后发生的,因此您从未观察到它达到2