VB 语言中do loop while循环语句如何使用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB 语言中do loop while循环语句如何使用?相关的知识,希望对你有一定的参考价值。

参考技术A Do
<循环体语句>
Loop
While
<条件判断>
......
特点:
因为一开始,直接进入循环,运行<循环体语句>后,才会去执行<条件判断>,所以这种循环语句,至少会执行一次循环。
如果<布尔表达式>的值为True,就从Do开始,继续执行循环;
如果<布尔表达式>的值为False,就循环结束,执行Loop
While
<条件判断>下面的语句。
例如:
i
=
1
Do
Print
i
i
=
i
+
1
Loop
While
i
<=
3
这里,<条件判断>就是i
<=
3;
初始i
=
1,进入Do循环
第1次循环;
执行
Print
i,输出
1
执行
i
=
i
+
1,i
等于2
执行
Loop
While
i
<=
3,因为此时i
=
2,i
<=
3的结果为True,继续循环,执行Do

第2次循环;
执行
Print
i,输出
2
执行
i
=
i
+
1,i
等于3
执行
Loop
While
i
<=
3,因为此时i
=
3,i
<=
3的结果为True,继续循环,执行Do

第3次循环;
执行
Print
i,输出
3
执行
i
=
i
+
1,i
等于4
执行
Loop
While
i
<=
3,因为此时i
=
2,i
<=
3的结果为False,循环结束

javaScript Event loop

1.JavaScript是一门单线程语言,单线程意味着他只有一个栈,一次只能去做一件事情,所以要知道他是如何去处理异步问题还得搞清楚JavaScript的代码执行运行机制。

  首先我们先写一段简单同步线程的代码

 function one(n){console.trace(n);}
 function tow(n){one(n)}
 function three(n){tow(n)}
 three(3)

 

如图所示callStack中是正在执行的代码,我们使用console.trace()打印此时调用站(callStack)的情况,下图的执行结果让我们了解到函数的调用顺序是一种后进先出的规律。

 

 

 

2.那么它是如何解决异步问题的呢?(task queues

我们先提一个概念    “任务队列task queues)“

由以下代码我们可以知道settimeout会延迟一秒执行,他在执行前会被放入一个任务队列当中(task queues),并不会直接去执行,等待 callStack 中的事件全部完成的时候 event loop才会去将taskQueues中的事件调到callStack中执行

console.log(\'start\');

setTimeout(()=>{
    console.log(\'waiting\')
}
, 1000)

console.log(\'end\');

  输出结果                                      由于setTimeout没有返回值所以他会先抛出undefined再等待一秒钟后打印

 

 

 3.异步队列也有执行优先级!(Microtasks

1.macrotask

 

 

 在等待回调的任务当中他们也分两种任务,macrotask queue就是我们常说的task queue。Macrotask包括了setTimeout, Dom 操作 click/onLoad/mouse事件绑定,fetch then response这类操作。实际上这些都是浏览器提供的API,所以在执行时是有它们单独的线程去进行操作。举个例子,setTimeout()设置了2s的延迟,是浏览器设置了timer来计时,是另外的线程在等待2秒,js主线程不受影响,2s后回调函数再进入task queue。

(function() {

  console.log(\'this is the start\');

  setTimeout(function cb() {
    console.log(\'this is a msg from call back\');
  });

  console.log(\'this is just a message\');

  setTimeout(function cb1() {
    console.log(\'this is a msg from call back1\');
  }, 0);

  console.log(\'this is the end\');

})();

 

 

 event loop会将先有返回的任务放入callstack中 如果cb若和cb1无时间差则按照先进先出的执行顺序

2.Microtask

ES6提供了Promise来进行异步操作。microtask。同上也有一个队列(job queue)来处理microtask。job queue拥有更高的优先级。每个task结束后,都会检查microtask队列是否有任务在等待执行,根据先进先出,依次执行。

console.log(\'script start\');

setTimeout(function() {
  console.log(\'setTimeout\');
}, 0);

Promise.resolve().then(function() {
  console.log(\'promise1\');
}).then(function() {
  console.log(\'promise2\');
});

 

 

 由于macrotask的队列(task queues)比  Microtask 的队列(job queues)优先级低所以setTImeout的打印内容最后执行

3.总结 event loop

eventloop 当callstack为空时去检查队列是否有需要执行的任务,执行顺序跟根据先进先出的规则执行,执行的Microtask(Promise) 队列比macrotask(setTimeout/DOM events/fetch)队列优先级高,Microtask 中的任务会先执行,当Microtask中的队列任务全部执行完毕之后才会去执行macrotask队列中的任务,当然最大的前提还是callstack得先执行完成

while (queue.waitForMessage()) {
  queue.processNextMessage();
}

  

 

以上是关于VB 语言中do loop while循环语句如何使用?的主要内容,如果未能解决你的问题,请参考以下文章

vb语句中Loop While是啥意思

VB中 while .....wend 与 DO while.....loop区别

VB 循环语句

VB循环语句主要都有哪些

vb6.0 循环语句 退出循环

vba如何把while loop得到的结果放入一个array里?