看Vue源码感觉看到了while(i--),感觉像死循环,求解~

在看Vue的源码,看到以下这段代码的while循环怎么看都是死循环,但是感觉源码不应该会有死循环啊,求指点~

function callUpdatedHooks (queue) {
  let i = queue.length
  // 这不是死循环吗
  while (i--) {
    const watcher = queue[i]
    const vm = watcher.vm
    if (vm._watcher === watcher && vm._isMounted) {
      callHook(vm, 'updated')
    }
  }
}
阅读 9.3k
9 个回答

首先,你要理解while循环:

while循环(英语:while loop)是一种控制流程的陈述。利用一个返回结果为布林值(Boolean)的表达式作为循> 环条件,当这个表达式的返回值为“真”(true)时,则反复执行循环体内的程式码;若表达式的返回值为“假”(false),则不再执行循环体内的代码,继续执行循环体下面的代码。

其次, while (i--),你要理解i--i=i-1,当i=0时, while (0)在js中就是while (false),循环就停止了。

while (i--)

while i>0为真
whie i==0为假

i--相当于i=i-1,也就是i到0时循环结束

i减到0不是假么。

i--;//当i到零的时候循环就停了  
while(0){} //这里是不执行的。

你没有看明白 i--吗?

while(0)就会停下来了

在 js 中 "" 、 0 、undefined 之类的转成布尔值都是 false

你现在不适合看源码..................

0在js的if判断中是false,所以--i等于0的时候,就跳出循环了,不会死循环滴

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题