JavaScript、变量范围、变量求值顺序
我正在使用量角器测试一些angularjs应用程序,遇到了这样一个问题: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');
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”的函数)。该函数不会立即调用,而是在将来的某个时候调用。这也可能有助于您: