js for循环会产生作用域吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js for循环会产生作用域吗相关的知识,希望对你有一定的参考价值。

参考技术A 不会,只有对象才会产生作用域

如果我输入 return 关键字,为啥 JS for 循环不起作用? [复制]

【中文标题】如果我输入 return 关键字,为啥 JS for 循环不起作用? [复制]【英文标题】:why JS for loop doesn't work if i put return keyword? [duplicate]如果我输入 return 关键字,为什么 JS for 循环不起作用? [复制] 【发布时间】:2020-03-11 19:53:06 【问题描述】:

当我像这个例子一样输入 return 关键字时:

for (let z = 0; z < 5; z++) 
   return console.log('one');
  
//the result is : 'one'

但是当我像这个例子一样删除 return 关键字时:

for (let z = 0; z < 5; z++) 
   console.log('one');
  
//the result is : 'one', 'one', 'one', 'one', 'one'

循环工作并返回五个'一' 这是什么原因?

【问题讨论】:

因为return 在第一次迭代后会以同样的方式跳出循环,如果您将break; 放入其中。 return 完全退出函数作用域,并将值返回给调用者。我不确定你在上面的例子中试图通过使用它来完成什么,因为console.log('one') 本身不返回任何值,所以你会返回undefined 另外:“循环工作并返回五个“一”,这是什么原因?” - 请注意 returning 是不同于日志记录。您的函数将“一次”记录到控制台五次 - 但它从不返回任何内容。 【参考方案1】:

return 返回值,立即结束函数。

它不会开始循环的下一次迭代,因为那是函数的一部分(您已从中返回)。

【讨论】:

【参考方案2】:

循环是一个语句,它表示“根据条件执行 thing 多次”。但是如果你return,你是在告诉循环停止,立即退出并给你返回的任何东西。

在这种情况下,console.log 不直接任何事情,它只是作为副作用打印到控制台。它没有返回任何东西。

它不会解析为一个值,因此您在第一个示例中所做的实际上是在循环一次迭代后返回 undefined(并且 console.log 仍然将该值打印到控制台,因为您'已经注意到)。

【讨论】:

以上是关于js for循环会产生作用域吗的主要内容,如果未能解决你的问题,请参考以下文章

js中变量的作用域

angularjs ng-if会创建新的作用域吗

js作用域for循环闭包问题

你真的理解JavaScript的作用域吗

JS闭包以及作用域初探

js改变作用域链